让我们以以下代码为例。
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)呢?