Rumah > pembangunan bahagian belakang > C++ > Mengapa `std::sort` Ranap Apabila Fungsi Perbandingan Tidak Tegas '

Mengapa `std::sort` Ranap Apabila Fungsi Perbandingan Tidak Tegas '

Mary-Kate Olsen
Lepaskan: 2024-12-29 09:12:15
asal
960 orang telah melayarinya

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

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:

  • Tidak refleks: a tidak boleh dikaitkan dengan dirinya sendiri (a ≱ a).
  • Transitif: Jika a berkaitan dengan b, dan b berkaitan dengan c, maka a berkaitan dengan c.
  • Anti-Simetri : Jika a berkaitan dengan b, dan b berkaitan dengan a, maka a adalah sama dengan b (a ≈ b).

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
    }
};
Salin selepas log masuk

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!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan