使用自定义比较器C++映射,不插入所有元素

C++ map with custom comparator not inserting all elements

本文关键字:插入 元素 映射 自定义 比较器 C++      更新时间:2023-10-16

>我创建了以下比较器来测试地图:

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;
    }
}

否则,它不符合对映射的键进行排序的条件。