typedef vector<int> vec;
struct classcomp {
bool operator() (const vec& vec1, const vec& vec2) const{
if (vec1[0] > vec2[0]){
return true;
}
return false;
}
};
int main() {
set<vec,classcomp> v;
for (int i = 0; i < 20; i++){
v.insert({rand()%20,i});
}
cout << "size: " << v.size() << endl;
for (auto e : v){
cout << e[0] << " " << e[1] << endl;
}
}
在上面的 C++ 代码中,我定义了一个自定义比较器和一组有序向量,该向量根据向量的第一个条目进行排序。我知道该集合不存储重复项,但我插入了 20 个不同的向量(每个向量的第二个条目都是唯一的),但我的集合的大小只有 14。这是为什么?
因为你的自定义比较器只比较向量中的第一个元素;它不关心第二个...
if (vec1[0] > vec2[0]){
return true;
}
return false;