可以std :: sort使用不严格的弱排序比较器作为拓扑排序吗?

时间:2017-11-05 10:46:50

标签: c++ sorting strict-weak-ordering

我知道我应该遵循c ++比较器的严格弱序。主要原因是!(a > b) && !(b > a)应该作为等价运算符。

但问题只在于你不需要等同于std::set的等价运算符。

例如,有集合的向量,如果集合A是B的适当子集,那么在排序之后,集合A的索引应该小于集合B的索引。

所以假设你写这样的比较器

bool comparator(vector<int> &A, vector<int> &B) const {
    // if A is proper subset of B, return true
    // otherwise, return false
}

然后使用此比较器的std::sort总是像拓扑排序一样工作吗?

加)

感谢Oliver Charlesworth提供的缺失信息。

我真的想知道这样的比较器可以像快速排序或插入排序(一些着名的基于比较的排序算法)一样用作拓扑排序。

1 个答案:

答案 0 :(得分:1)

不,它可能不起作用。 std::sort合同需要一个严格的弱排序比较器;违反它会导致不确定的行为。顺便说一下,我已经多次看到libstdc ++ std::sort残酷地崩溃(读取容器外的元素,IIRC)这种比较器&#34;放松&#34;。