即使我在 std::set 中插入了 20 个(不同的)元素,它的大小也只有 14?

问题描述 投票:0回答:1
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。这是为什么?

c++ stl
1个回答
0
投票

因为你的自定义比较器只比较向量中的第一个元素;它不关心第二个...

if (vec1[0] > vec2[0]){
   return true;
}
return false;
© www.soinside.com 2019 - 2024. All rights reserved.