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
863 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!

sumber:php.cn
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