Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Menggunakan Jenis Ditakrifkan Pengguna sebagai Kekunci dalam C std::maps?

Bagaimanakah Saya Boleh Menggunakan Jenis Ditakrifkan Pengguna sebagai Kekunci dalam C std::maps?

Patricia Arquette
Lepaskan: 2024-12-24 13:49:14
asal
678 orang telah melayarinya

How Can I Use User-Defined Types as Keys in C   std::maps?

Jenis Ditentukan Pengguna sebagai Kekunci dalam std::maps

Isu: Ralat Pengkompil Samar Apabila Menggunakan Peta dengan Jenis Ditentukan Pengguna

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.

Memahami Ralat

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.

Penyelesaian 1: Objek Fungsi Pembanding

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&amp; lhs, const Class1&amp; 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&amp; lhs, const Class1&amp; rhs) const {
           return lhs.id < rhs.id;
       }
    };
}
Salin selepas log masuk

Pendekatan ini membenarkan peta lalai kepada std::less sebagai perbandingan, sambil menyediakan pelaksanaan khusus untuk pengguna- jenis yang ditentukan.

Kesimpulan

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!

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