Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menggunakan Jenis Ditakrifkan Pengguna sebagai Kekunci dalam std::maps dalam C ?
Mengatasi Halangan: Menggunakan std::maps dengan Jenis Ditentukan Pengguna sebagai Kekunci
Dalam bidang pemetaan pasangan nilai kunci dalam C , bukan sesuatu yang luar biasa untuk menghadapi situasi di mana jenis yang ditentukan pengguna lebih disukai untuk menentukan kunci. Walau bagaimanapun, apabila cuba menggunakan std::maps dengan kunci yang ditentukan pengguna, mesej ralat samar mungkin muncul semasa penyusunan. Untuk memahami ralat ini dan kepentingannya, mari kita mendalami nuansa std::maps dan jenis yang ditentukan pengguna.
Apabila bekerja dengan std::maps, kita sering bergantung pada jenis primitif sebagai kunci, seperti integer atau rentetan. Jenis primitif mempunyai pengendali perbandingan yang jelas (<, >, ==, dsb.) yang memudahkan susunan kunci yang cekap dalam peta. Walau bagaimanapun, apabila menggunakan jenis yang ditentukan pengguna sebagai kunci, adalah penting untuk ambil perhatian bahawa pelaksanaan pengendali perbandingan ini adalah penting untuk fungsi peta yang betul. Di sinilah mesej ralat yang anda temui dimainkan.
Ralat yang disebut dalam soalan membayangkan ketiadaan pengendali< pelaksanaan untuk Kelas1 yang ditentukan pengguna. Secara lalai, std::maps bergantung pada kurang<> templat untuk membandingkan kunci. kurang<> secara dalaman memanggil operator< ditakrifkan untuk jenis kunci. Malangnya, Class1 kekurangan operator ini, mengakibatkan ralat penyusunan.
Untuk menyelesaikan isu ini, terdapat beberapa penyelesaian yang berdaya maju:
struct Class1Compare { bool operator() (const Class1& lhs, const Class1& rhs) const { return lhs.id < rhs.id; } }; std::map<Class1, int, Class1Compare> c2int;</p> <ol start="3"><li> <strong>Mengkhususkan std::less:</strong> Jika semantik perbandingan tidak penting untuk kegunaan anda kes, pertimbangkan untuk mengkhususkan templat std::less untuk Class1. Pendekatan ini membenarkan kriteria perbandingan ditakrifkan di luar skop Kelas1, menjadikan kod lebih boleh diperluaskan.</li></ol> <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; } }; }
Dengan menggunakan salah satu pendekatan ini, anda boleh mengatasi ralat dan berjaya menggunakan std: :peta dengan jenis yang ditentukan pengguna sebagai kunci. Adalah penting untuk memilih penyelesaian yang paling sesuai dengan keperluan projek anda dan prinsip reka bentuk.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menggunakan Jenis Ditakrifkan Pengguna sebagai Kekunci dalam std::maps dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!