簡體   English   中英

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總是像拓撲排序一樣工作嗎?

加)

感謝奧利弗·查爾斯沃思(Oliver Charlesworth)丟失的信息。

我真的很想知道這樣的比較器可以像快速排序或插入排序(某些著名的基於比較的排序算法)一樣進行拓撲排序。

不,它可能無法正常工作。 std::sort合約要求嚴格的弱比較器; 違反它會導致不確定的行為。 順便說一句,我已經多次看到libstdc ++ std::sort為這種比較器“松弛”而崩潰(讀取容器外部的元素,IIRC)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM