std::sort与不严格的弱排序比较器可以作为拓扑排序工作
could std::sort with not strict weak ordering comparator work as topological sorting?
我知道我应该遵循严格的 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)。
相关文章:
- 为什么指针在对二维数组进行排序时无法正常工作?
- 排序功能在C++中未按预期工作
- 解释一下这个排序算法是如何工作的?
- 快速排序函数在快速排序算法中如何工作?
- 解释标准库排序函数C++的比较谓词的工作原理?
- 排序函数如何在整数对的向量上工作?
- 合并排序实施无法正常工作
- 运算符重载在 CPP 中的排序中如何工作?
- 快速排序动态大量对象无法正常工作
- 当输入向量称为储备金时,STD ::排序无法正常工作
- 排序功能无法正常工作
- std::sort与不严格的弱排序比较器可以作为拓扑排序工作
- 实现快速排序,几乎可以工作但不能
- 排序向量<变体<...>>无法通过运算符正常工作<
- 排序函数的第三个参数如何工作
- 合并排序无法在N logN中工作
- 快速排序程序停止工作
- 气泡排序:为什么它不能正常工作?
- 这种珠子排序算法的 c++ 实现是如何工作的
- 在 C++ 中工作排序函数