使用自定义比较器C++映射,不插入所有元素
C++ map with custom comparator not inserting all elements
>我创建了以下比较器来测试地图:
struct comparator{
bool operatior() (int a,int b){
return 1;
}
}
然后是以下算法:
int main(){
// imports string to currentString
...
std::map<int,char> default_map;
std::map<int,char,comparator> test_map;
while(i < stringSize){
if(currentString[i] == '(' || currentString[i] == ')'){
default_map[i]=currentString[i];
test_map[i]=currentString[i];
}
}
auto currentIterator = default_map.begin();
while(currentIterator != default_map.end()){
printf("%d %cn",currentIterator->first,currentIterator->second);
}
auto currentIterator = test_map.begin();
while(currentIterator != test_map.end()){
printf("%d %cn",currentIterator->first,currentIterator->second);
}
return 0;
}
在这里,default_map打印所有括号,而带有自定义比较器的test_map仅打印前两个括号。
这是地图代码中的错误吗?我最初想将类作为带有自定义比较器的键,但它甚至不适用于自定义 int 键。
我的 make 文件确实使用了 -std=c++1y 标签,所以也许这会影响它?我不知道该怎么办。我正在考虑看看SGI地图是否会比标准地图更好用。
您的"比较器"(拼写错误的"运算符"(总是返回1
。您期望如何有效地确定地图中是否已包含某些内容或其正确的顺序?(提示:它不会(。
您需要编写一个以有用的方式实际比较元素的函数。
比较函数需要实现严格的弱排序才能在map
中使用。
您需要正确实现比较函数。
struct comparator{
bool operatior() (int a,int b){
return (a < b);
// return 1;
}
}
否则,它不符合对映射的键进行排序的条件。
相关文章:
- 如何在向量数组中插入元素?
- 有没有更快的方法可以在 std::vector 中插入元素
- 映射C++按值排序和插入元素
- 如何在一对集合的向量中插入元素?vector<pair<int,set<string>>>
- 当索引位于末尾和空数组时,向数组插入元素时出现问题
- 在 QSet 中插入元素<QString>并检索 ,删除 QSet 的最后一项
- C++ 在列表末尾插入元素的列表的 STL 向量
- 插入元素后矢量容量增加
- 如何在 c++ 集中插入元素,直到按下 Enter 键
- C++向量插入元素
- 有没有办法在unordered_map的某个位置插入元素
- 重新插入元素可以"re-validate"迭代器吗?
- 内部源代码 - 在链接列表实现中插入元素上的删除会破坏整个应用程序
- 在链表中插入元素
- stl 中是否有任何数据结构可以在 O(1) 或 O(log n) 中插入元素,我可以在其上编写自己的bin_searc
- 如何在将数据结构插入元素后继续迭代数据结构
- 有没有一种方法可以在std::向量的特定位置重复插入元素
- 在向量 (C++) 中保留插入元素的地址
- 插入元素后Unordered_map变空,我做错了什么
- 循环a std :: unordered_map,序列始终是i插入元素的序列