Dalam C pengaturcaraan, penggunaan peta STL dengan kelas yang ditentukan pengguna sering menghadapi ralat penyusun samar. Khususnya, mesej ralat "tiada padanan untuk 'pengendali<' dalam '__x < __y'" adalah perkara biasa apabila cuba mengakses elemen menggunakan kunci jenis yang ditentukan pengguna.
Mesej ralat menunjukkan bahawa pengkompil tidak dapat untuk mencari operator < untuk membandingkan dua keadaan jenis yang ditentukan pengguna. Ini kerana, secara lalai, peta STL memerlukan pengendali perbandingan (pengendali<) untuk memesan kuncinya. Walau bagaimanapun, apabila bekerja dengan jenis yang ditentukan pengguna, operator ini tidak tersedia secara automatik.
Daripada mentakrifkan operator< untuk jenis yang ditentukan pengguna, seseorang boleh mencipta kelas objek fungsi pembanding. Kelas ini melaksanakan versi khusus operator() yang menentukan susunan relatif jenis yang ditentukan pengguna. Peta kemudiannya boleh dikhususkan untuk menggunakan pembanding ini:
struct Class1Compare { bool operator() (const Class1& lhs, const Class1& rhs) const { return lhs.id < rhs.id; } }; std::map<Class1, int, Class1Compare> c2int;</p> <h3>Penyelesaian 2: Pengkhususan std::less</h3> <p>Alternatif lain ialah mengkhususkan templat std::less untuk yang ditentukan pengguna menaip. Ini menyediakan definisi tersuai untuk operator() dalam kelas std::less:</p> <pre class="brush:php;toolbar:false">namespace std { template<> struct less<Class1> { bool operator() (const Class1& lhs, const Class1& rhs) const { return lhs.id < rhs.id; } }; }
Pendekatan ini membenarkan peta lalai kepada std::less sebagai perbandingan, sambil menyediakan pelaksanaan khusus untuk pengguna- jenis yang ditentukan.
Apabila bekerja dengan peta STL dan jenis yang ditentukan pengguna, adalah penting untuk menyediakan kaedah untuk membandingkan kunci. Ini boleh dicapai sama ada melalui objek fungsi pembanding atau dengan mengkhususkan std::less. Dengan memenuhi keperluan ini, pembangun boleh menggunakan peta dengan jenis yang ditentukan pengguna sebagai kunci dengan berkesan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan Jenis Ditakrifkan Pengguna sebagai Kekunci dalam C std::maps?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!