use*_*316 6 c++ visual-c++ stdset c++11
我有以下代码行:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
有了这个,我试图在 a 中插入非重复值set,但不知何故代码没有点击打印现有元素并且重复值被插入。
这里有什么问题?
您应该为 const char* 定义 less 谓词并传递到 set 模板中,以使 set 对象与指针一起正常工作:
struct cstrless {
bool operator()(const char* a, const char* b) const {
return strcmp(a, b) < 0;
}
};
std::set<const char*, cstrless> setValues;
Run Code Online (Sandbox Code Playgroud)