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。

用我给的comparator comp可以查出gcd(12, 7)不小于gcd(12, 5) ,但是怎么算出gcd(12, 7)等于gcd(12, 5) ?

回答

它以不同的参数顺序调用比较器两次。

如果cmp(x, y)cmp(y, x)都为假,则xy被认为是等价的。


以上是std:set在插入过程中如何检查set中是否存在等效元素?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>