我们对单集有一个很好的解释:
- 使用自定义标准::设置比较器
但我想知道这将如何适用于如下所示的集合数组:
bool cmp(const pair <int, int> &a, const pair <int, int> &b) {
if (b.first < a.first)
return true;
return a < b;
}
set <pair <int, int>, decltype(&cmp)> block[SQ](&cmp);
我更喜欢方法3,但你可以回答任何你喜欢的方法。
也许是这样的
:struct CmpWrapper {
bool operator()(const pair <int, int> &a, const pair <int, int> &b) const {
return cmp(a, b);
}
};
set <pair <int, int>, CmpWrapper> block[SQ];
正如@SamVarshavchik注释中指出的,cmp
不符合严格弱排序的要求(例如,存在p
和q
对,其中cmp(p, q)
和cmp(q, p)
都是真的(。直接或通过此包装器将其与std::set
一起使用,将表现出未定义的行为。