Dalam C , std::sort memerlukan fungsi perbandingan yang mematuhi peraturan pesanan lemah yang ketat. Peraturan ini memastikan bahawa fungsi perbandingan kembali benar jika dan hanya jika operan kiri kurang daripada operan kanan.
Pertimbangkan kod yang disediakan:
#includestruct A { A() : a() {} bool operator<(const A& other) const { return a <= other.a; } int a; }; int main() { A coll[8]; std::sort(&coll[0], &coll[8]); // Crash!!! } Fungsi perbandingan tersuai mengembalikan < ;= lain.a untuk kes kesamarataan. Ini melanggar peraturan susunan lemah yang ketat, kerana ia menyatakan bahawa dua elemen dianggap sama jika dan hanya jika a == lain.a.
Dengan menukar perbandingan kepada < lain.a, peraturan itu berpuas hati kerana ia kembali benar hanya apabila a benar-benar kurang daripada yang lain.a. Menggunakan susunan yang ketat menghalang algoritma daripada memasuki gelung tak terhingga apabila menghadapi elemen yang sama.
Kesimpulannya, std::isih ranap dengan bukan pengendali< fungsi perbandingan kerana fungsi tersebut melanggar peraturan susunan lemah yang ketat, yang berpotensi membawa kepada gelung tak terhingga. Oleh itu, adalah penting untuk memastikan fungsi perbandingan anda mematuhi peraturan ini untuk mengelakkan tingkah laku yang tidak dijangka.
Atas ialah kandungan terperinci Mengapa `std::sort` Ranap Apabila Menggunakan Fungsi Perbandingan Pesanan Lemah yang Tidak Tegas?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!