Mengapa Saya Tidak Boleh Isih Senarai dalam Susunan Menurun Menggunakan `std::sort` dan Pembanding Tersuai?

Patricia Arquette
Lepaskan: 2024-11-20 16:53:28
asal
408 orang telah melayarinya

Why Can't I Sort a List in Descending Order Using `std::sort` and a Custom Comparator?

Isih Senarai Menggunakan Fungsi Isih STL

Melaksanakan isihan senarai dalam tertib menurun boleh mencabar apabila senarai mengandungi objek struct tersuai. Walau bagaimanapun, isu yang anda hadapi, "tiada padanan untuk 'operator-' dalam '__last - __first'", mendedahkan masalah yang lebih mendalam dengan pendekatan pengisihan yang dipilih.

Struktur SortDescending yang disediakan dengan betul mentakrifkan operator untuk membandingkan dua terma, tetapi ia berbuat demikian berdasarkan kuasa mereka, t2.pow < t1.pow. Perbandingan ini, bagaimanapun, tidak serasi dengan fungsi isihan standard.

Masalahnya berpunca daripada fakta bahawa std::sort memerlukan iterator capaian rawak, yang tidak disediakan oleh iterator senarai. Iterator dwiarah, seperti yang terdapat dalam std::list, membenarkan anda bergerak melalui senarai, tetapi mereka tidak mempunyai keupayaan yang diperlukan untuk melakukan akses terus atau aritmetik penunjuk.

Untuk mengisih senarai menggunakan fungsi isihan STL, rawak iterator capaian mesti ada. Pendekatan alternatif ialah menggunakan fungsi ahli std::list::sort. Fungsi ini menerima fungsi pembanding sebagai hujah, membolehkan anda mentakrifkan kriteria pengisihan tersuai.

Dalam kes anda, kod berikut akan mengisih senarai dalam tertib menurun berdasarkan kuasa syaratnya:

Result.poly.sort([](const term& t1, const term& t2) { return t1.pow > t2.pow; });

Dengan menggunakan iterator yang betul dan fungsi pengisihan yang sesuai, anda boleh mengisih senarai anda dalam susunan yang diingini dengan berkesan.

Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Isih Senarai dalam Susunan Menurun Menggunakan `std::sort` dan Pembanding Tersuai?. 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