Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Menggunakan Fungsi Ahli sebagai Pembanding dalam `std::sort`?

Bagaimanakah Saya Boleh Menggunakan Fungsi Ahli sebagai Pembanding dalam `std::sort`?

Linda Hamilton
Lepaskan: 2024-12-03 11:03:13
asal
930 orang telah melayarinya

How Can I Use a Member Function as a Comparator in `std::sort`?

Fungsi Ahli sebagai Pembanding dalam Isih Masalah

Apabila cuba menggunakan kod yang diberikan, pengkompil menimbulkan ralat melarang pengambilan alamat yang tidak layak atau fungsi ahli bukan statik dalam kurungan untuk membentuk penunjuk kepada fungsi ahli. Isu ini timbul daripada takrifan bukan statik bagi fungsi ahli doCompare.

Untuk menyelesaikan isu ini, adalah perlu untuk mengisytiharkan doCompare sebagai statik. Walau bagaimanapun, jika fungsi tersebut memerlukan akses kepada data dari dalam MyClass, kelas boleh diubah menjadi functor perbandingan dengan mengubah doCompare daripada:

doCompare( const int & i1, const int & i2 ) { // use some member variables }
Salin selepas log masuk

Kepada:

bool operator () ( const int & i1, const int & i2 ) { // use some member variables }
Salin selepas log masuk

Kaedah doSort kemudiannya hendaklah menggunakan fungsi perbandingan menggunakan sintaks:

doSort() { std::sort(arr, arr+someSize, *this); }
Salin selepas log masuk

Sebagai alternatif, anda boleh memanfaatkan std::mem_fun untuk menukar fungsi ahli kepada fungsi percuma. Walau bagaimanapun, kerana std::sort menerima fungsi perbandingan mengikut nilai, membalut fungsi dalam kelas itu sendiri adalah disyorkan. Kod yang diubah suai menggunakan pendekatan ini muncul seperti berikut:

class MyClass {
    struct Less {
        Less(const MyClass& c) : myClass(c) {}
        bool operator () ( const int & i1, const int & i2 ) {// use 'myClass'} 
        MyClass& myClass;
    };
    doSort() { std::sort(arr, arr+someSize, Less(*this)); }
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan Fungsi Ahli sebagai Pembanding dalam `std::sort`?. 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