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

时间:2017-06-12 20:19:11

标签: c++ stl std comparator stdmap

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

struct comparator{
    bool operatior() (int a,int b){
        return 1;
    }
}

然后是以下algorthim:

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 %c\n",currentIterator->first,currentIterator->second);
    }

    auto currentIterator = test_map.begin();
    while(currentIterator != test_map.end()){
         printf("%d %c\n",currentIterator->first,currentIterator->second);
    }

    return 0;
}

这里default_map打印所有的括号,而带有自定义比较器的test_map只打印前两个括号。

这是地图代码中的错误吗? 我原本希望将类作为自定义比较器的关键,但它甚至不能使用自定义的int键。

我的make文件确实使用了-std = c ++ 1y标签,所以这可能会影响它吗? 我不知道该怎么做。我正在考虑看看SGI地图是否比标准地图更好。

2 个答案:

答案 0 :(得分:1)

您需要正确实施比较功能。

struct comparator{
    bool operatior() (int a,int b){
        return (a < b);
        // return 1;
    }
}

否则,它不符合订购地图键的标准。

答案 1 :(得分:1)

你的&#34;比较器&#34; (拼写错误&#34;运算符&#34;)始终返回1。您如何期望有用地确定地图中是否已存在某些内容或其正确排序? (提示:它赢了)。

您需要编写一个实际以有用的方式比较元素的函数。

比较功能需要实现strict weak ordering才能在map中使用。