Rumah >pembangunan bahagian belakang >C++ >Mengapa Saya Tidak Boleh Isih Senarai dalam Susunan Menurun Menggunakan `std::sort` dan Pembanding Tersuai?
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!