std::sort与不严格的弱排序比较器可以作为拓扑排序工作

could std::sort with not strict weak ordering comparator work as topological sorting?

本文关键字:排序 工作 比较器 sort std      更新时间:2023-10-16

我知道我应该遵循严格的 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这个比较器总是像拓扑排序一样工作吗?

加号)

感谢奥利弗·查尔斯沃思缺少信息。

我真的很想知道这样的比较器与快速排序或插入排序(一些著名的基于比较的排序算法)作为拓扑排序一起工作。

不,它很可能不起作用。 std::sort合约需要严格的弱排序比较器;违反它会导致未定义的行为。顺便说一句,我已经看到 libstdc++ std::sort这种比较器"放松"而残酷地崩溃(读取容器外的元素,IIRC)。