1. 程式人生 > >一次stl sort呼叫導致的程序崩潰

一次stl sort呼叫導致的程序崩潰

comp函式應該怎麼寫


帶著這個疑問我去查了下c++ stl手冊(http://www.cplusplus.com/reference/algorithm/sort/),發現sort函式對於comp函式還真有一個特殊的要求,叫做“Strict Weak Ordering”。什麼意思呢,它大概可以這麼解釋:如果一個comp函式要滿足“Strict Weak Ordering”,意味著它應該滿足如下特徵(更多細節可以參見SGI版實現相關描述http://www.sgi.com/tech/stl/StrictWeakOrdering.html):


(a)  反自反性:也即comp(x, x)必須是false


(b)  非對稱性:也即如果comp(x, y)和comp(y, x)的結果必然相反


(c)   可傳遞性:也即如果comp(x, y)為true,comp(y, z)為true,那麼comp(x, z)必然為true


 這麼看到,示例程式碼的comp定義明顯違反了(a)\(b)兩條,所以sort使用它時就可能工作不正常。解決辦法也很簡單,去掉那個“=”,再對照下”Strict Weak Ordering”的定義,應該是滿足了的。