如何解决std:set 在插入过程中如何检查 set 中是否存在等效元素?
我们以下面的代码为例。
auto cmp = [](ll a,ll b) {
return gcd(12,a) < gcd(12,b);
};
set<ll,decltype(cmp)> s(cmp);
for(ll i = 0; i < 2; i++){
ll x;
cin >> x;
s.insert(x);
cout << "Success! \n";
}
我定义了新的比较器,通过最大公约数与 12 进行比较。
首先我成功插入了 5。然后我尝试插入 7,但没有成功。
我知道 gcd(12,5) = gcd(12,7) = 1。
但我不明白 std::set
如何检查 5 是否等于 7。
使用比较器comp可以找出gcd(12,7)不小于gcd(12,5) 我给了它,但是它是如何计算出gcd(12,7) ) 等于 gcd(12,5)?
解决方法
它以不同的参数顺序调用比较器两次。
如果 cmp(x,y)
和 cmp(y,x)
都为假,那么 x
和 y
被认为是等价的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。