如何定义集合数组的比较函数?



我们对单集有一个很好的解释:

  • 使用自定义标准::设置比较器

但我想知道这将如何适用于如下所示的集合数组:

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不符合严格弱排序的要求(例如,存在pq对,其中cmp(p, q)cmp(q, p)都是真的(。直接或通过此包装器将其与std::set一起使用,将表现出未定义的行为。

相关内容

  • 没有找到相关文章

最新更新