[英]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
總是像拓撲排序一樣工作嗎?
加)
感謝奧利弗·查爾斯沃思(Oliver Charlesworth)丟失的信息。
我真的很想知道這樣的比較器可以像快速排序或插入排序(某些著名的基於比較的排序算法)一樣進行拓撲排序。
不,它可能無法正常工作。 std::sort
合約要求嚴格的弱比較器; 違反它會導致不確定的行為。 順便說一句,我已經多次看到libstdc ++ std::sort
為這種比較器“松弛”而崩潰(讀取容器外部的元素,IIRC)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.