首頁 > 後端開發 > C++ > 當比較函數不是嚴格的時,為什麼 `std::sort` 會崩潰”

當比較函數不是嚴格的時,為什麼 `std::sort` 會崩潰”

Mary-Kate Olsen
發布: 2024-12-29 09:12:15
原創
879 人瀏覽過

Why Does `std::sort` Crash When the Comparison Function Isn't a Strict

如果比較函數不是嚴格運算子“

提供的 C 程式碼片段示範了由於比較函數不正確,在使用 std::sort 時發生崩潰。由於 std::sort 期望排序器滿足嚴格的弱排序規則,因此讓我們深入研究該問題及其解決方案。

在程式碼中,A 結構體的比較函數檢查 a 是否小於或等於到 (

嚴格弱排序

嚴格弱排序定義的關係為:

  • 非反身: a 不能與自體相關(a ≱ a).
  • 傳遞:如果a與b相關,且b與c相關,則a與c相關。
  • 反對稱: 如果a 與b 相關,b 與a 相關,則a 等於b (a ≈ b).

程式碼中,比較函數不滿足反對稱性,即使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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板