Mengapa std::sort Crash Jika Fungsi Perbandingan Bukan Pengendali Tegas "<"?
Coretan kod C yang disediakan menunjukkan ranap semasa menggunakan std::sort disebabkan oleh fungsi perbandingan yang salah. Oleh kerana std::sort menjangkakan penyusun yang memenuhi peraturan susunan lemah yang ketat, mari kita teliti isu dan penyelesaiannya.
Dalam kod, fungsi perbandingan untuk struct A menyemak sama ada a adalah kurang daripada atau sama kepada (<=) lain.a. Walau bagaimanapun, ini melanggar peraturan pesanan lemah yang ketat.
Pemesanan Lemah Tegas
Penyusunan lemah yang ketat mentakrifkan hubungan iaitu:
Dalam kod, fungsi perbandingan tidak memenuhi sifat anti-simetri, kerana ia kembali benar walaupun a adalah sama dengan yang lain.a. Ini boleh membawa kepada tingkah laku bukan penentu dalam std::sort, seperti gelung tak terhingga.
Penyelesaian
Untuk menyelesaikan isu, fungsi perbandingan harus diubah suai untuk mematuhi peraturan susunan lemah yang ketat dengan mengembalikan benar hanya apabila a adalah kurang daripada yang lain.a, seperti yang ditunjukkan di bawah:
struct A { bool operator <(const A& other) const { return a < other.a; // Return true only when a is strictly less than other.a } };
Fungsi perbandingan diperbetulkan ini memastikan peraturan susunan lemah yang ketat dipatuhi, membolehkan std::sort berfungsi seperti yang diharapkan tanpa ranap.
Atas ialah kandungan terperinci Mengapa `std::sort` Ranap Apabila Fungsi Perbandingan Tidak Tegas '. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!