如果比較函數不是嚴格運算子“
提供的 C 程式碼片段示範了由於比較函數不正確,在使用 std::sort 時發生崩潰。由於 std::sort 期望排序器滿足嚴格的弱排序規則,因此讓我們深入研究該問題及其解決方案。
在程式碼中,A 結構體的比較函數檢查 a 是否小於或等於到 (
嚴格弱排序
嚴格弱排序定義的關係為:
程式碼中,比較函數不滿足反對稱性,即使a等於other.a,它也會回傳true。這可能會導致 std::sort 中出現不確定性行為,例如無限循環。
解
要解決此問題,應修改比較函數遵守嚴格的弱排序規則,僅當a 嚴格小於other.a 時才傳回true,如下所示:
struct A { bool operator <(const A& other) const { return a < other.a; // Return true only when a is strictly less than other.a } };
This更正的比較函數確保遵守嚴格的弱排序規則,使std::sort能夠按預期運行而不會崩潰。
以上是當比較函數不是嚴格的時,為什麼 `std::sort` 會崩潰”的詳細內容。更多資訊請關注PHP中文網其他相關文章!