2011-10-07 50 views
-1

我的問題與this有關,因爲我解決了這個問題,我寫了自己的排序算法(簡單的插入排序),並且它可以工作。我對此非常驚訝,因爲我認爲標準庫經過了充分測試。是否有任何已知的特殊情況,std::sort可能會搞砸?std :: sort可能導致錯誤嗎?

+0

如果你的比較器不是自洽的,那麼你可能會遇到麻煩。 –

+0

你是什麼意思的自我一致? – Sim

+1

如果使用(a,b)和(b,a)調用比較器時沒有給出一致的答案,則可能會遇到麻煩。如果(a,b)返回true,則(b,a)最好返回false。 –

回答

6

不,在任何常見的C++標準庫實現std::sort中都不存在任何已知的錯誤。它經過嚴格測試。

如果您看到崩潰或不正確的結果,那幾乎肯定是因爲您沒有遵守合同:要麼您傳遞了無效參數,要麼您的比較器不遵守strict weak ordering(不反射,不對稱,傳遞性,等價性的傳遞性)。

1

如果您的比較函數/對象沒有遵循嚴格的弱排序,或者您正在排序的對象包含不再有效的指針,則這兩者中的任何一個都可能導致它斷開。

+0

以及我的算法也不容忍nullpointer,所以唯一的可能性可能是第二種情況,但我不知道什麼是'自我一致'的意思 – Sim

+0

@Sim:它不應該是可能的'a UncleBens