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 <= b.a を使用して要素を比較します。等しい要素はソート済みとみなされます。これは、std::sort で必要な 厳密な弱い順序付け ルールに違反しています。
解決策:
厳密な弱い順序付けルールに従って、シーケンス内の要素 A、B、および C には、次の条件が満たされる必要があります。
元の比較関数 Compare は、A が次と等しくなることを許可しているため、このルールを満たしません。それ自体が std::sort 内で無限ループを引き起こす可能性があります。これを修正するには、比較関数を上記のコード スニペットに示されている修正バージョンに置き換える必要があります。
以上が`std::sort` がクラッシュするのはなぜですか? (そしてそれを修正する方法)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。