【发布时间】:2023-01-27 15:58:04
【问题描述】:
我正在学习 std::set 。这是我的代码:
#include <set>
#include <iostream>
using namespace std;
struct cmp{
bool operator () (const int & a,const int & b) const {
if(abs(a-b)<=3)
return false;
return a < b;
}
};
set<int,cmp> q{1, 2, 10};
int main(){
if(q.find(4)!=q.end())
cout << 1;
else
cout << 2;
}
输出:1
我使用 struct cmp 来自定义元素的排序规则,如果 abs(a-b)<=3 新元素将被删除。
但是令我惊讶的是 q.find() 已经被改变了。
我想知道为什么输出是1,q中没有4。
q.find(4)是获取元素等于的迭代器 4 在 q 中,不是吗?
【问题讨论】:
-
4、1 和 2 与您的比较器相同。
find()确实找到了 4,如果找到一个等于 4 的元素。