首頁 >後端開發 >C++ >為什麼我的 `std::sort` 崩潰了? (以及如何修復它)

為什麼我的 `std::sort` 崩潰了? (以及如何修復它)

Susan Sarandon
Susan Sarandon原創
2024-12-14 16:22:14761瀏覽

Why Does My `std::sort` Crash?  (And How to Fix It)

了解std::sort 導致編譯器崩潰

C 標準函式std::sort 在資料排序中扮演至關重要的作用結構。但是,並非所有比較函數都按 std::sort 的預期運行,可能會導致程式崩潰。

考慮以下程式碼片段:

#include <algorithm>

struct A
{
    int a;
};

bool compare(const A& a, const A& b)
{
    return a.a <= b.a; // Corrected from original code (<)
}

int main()
{
    A coll[8];
    std::sort(&coll[0], &coll[8]);
}

問題:

原始程式碼中,比較函數compare使用a.a 嚴格弱排序規則。

解:

根據嚴格弱排序規則,對於任意序列中的元素A、B 和C 必須滿足以下條件:

  • 如果A
  • 如果A
  • B和B< C,則A<0 C.
  • A 不能等於自身(即 A != A)。

原來的比較函數 Compare 不符合這個規則,因為它允許 A 等於本身,導致 std::sort 內潛在的無限循環。要解決此問題,需要將比較函數替換為上面程式碼片段中顯示的修正版本。

以上是為什麼我的 `std::sort` 崩潰了? (以及如何修復它)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn