我有以下代码行:
const char *values[] = { "I", "We", "You", "We"};
std::set<const char*> setValues;
for( int i = 0; i < 3; i++ ) {
const char *val = values[i];
std::set<const char*>::iterator it = setValues.find( val );
if( it == setValues.end() ) {
setValues.insert( val );
}
else {
cout << "Existing value" << endl;
}
}
有了这个,我试图在
set
中插入非重复值,但不知何故代码没有点击打印现有元素,并且插入了重复值。这里有什么问题?
最佳答案
您应该为 const char* 定义 less 谓词并传递到 set 模板以使 set 对象与指针一起正常工作:
struct cstrless {
bool operator()(const char* a, const char* b) {
return strcmp(a, b) < 0;
}
};
std::set<const char*, cstrless> setValues;
关于c++ - std::set 使用 char * 类型查找行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38655928/