小编use*_*259的帖子

使用自定义比较器设置的STL允许重复元素

以下代码是产生问题的简化示例.

许多字符串(char*)被插入到集合中,其中许多字符串是非唯一的.应检测重复的字符串,并返回指向原始插入的指针; 但是,有时这不会发生,并且已插入的字符串再次插入,就像它已经存在一样.

结果集应包括:"aa","bb","cc".输出显示该组最终得到:"bb","cc","aa","bb".更改首次插入的字符串似乎会更改"允许"的副本.

不使用字符串上的数字前缀,但添加了数字前缀以确保每个字符串都有唯一的指针; 没有它们,问题仍然存在.

使用默认比较器和非前缀字符串确实按预期工作,但这只比较指针; 为字符串添加前缀会产生唯一的指针,并插入所有字符串.

#include <iostream>
#include <set>
#include <cstring>

using std::cout;
using std::endl;
using std::set;
using std::pair;

typedef set<const char*>::const_iterator set_iter;

struct cmp_op {
    int operator() (const char* x,const char* y) const {
        int r = strcmp(x,y);
        //cout << "cmp: " << x << ((r)?((r>0)?" > ":" < "):" == ") << y << endl;
        return r;
    }
};

int main() {
    //first char ignored, just ensures unique pointers
    const char* a[] = {"1bb","2aa","3aa","4bb","5cc","6aa","7bb","8cc","9bb"};
    const …
Run Code Online (Sandbox Code Playgroud)

c++ stl set comparator

1
推荐指数
1
解决办法
832
查看次数

标签 统计

c++ ×1

comparator ×1

set ×1

stl ×1