Rumah >pembangunan bahagian belakang >C++ >Apakah Keperluan Utama yang Mesti Dipuaskan Kelas untuk Digunakan sebagai Key in std::map?

Apakah Keperluan Utama yang Mesti Dipuaskan Kelas untuk Digunakan sebagai Key in std::map?

Patricia Arquette
Patricia Arquetteasal
2024-12-08 04:38:11698semak imbas

What Key Requirements Must a Class Satisfy to Be Used as a Key in std::map?

Keperluan Utama untuk std::map

Dalam menggunakan std::map, persoalan biasa timbul mengenai ciri-ciri yang mesti dimiliki oleh kelas utama untuk berfungsi sebagai kunci yang sah.

Prasyaratnya agak mudah: kelas kunci mesti menyediakan salinan dan tugasan keupayaan. Susunan sebenar dalam peta ditentukan oleh hujah templat ketiga atau hujah pembina (jika dinyatakan). Argumen ini biasanya lalai kepada std::less, yang seterusnya lalai kepada operator kurang daripada (<). Walau bagaimanapun, penggunaan lalai adalah tidak wajib.

Untuk menyesuaikan susunan kunci, anda boleh mencipta pengendali perbandingan, sebaik-baiknya sebagai objek berfungsi. Berikut ialah contoh operator sedemikian untuk jenis hipotesis MyType:

struct CmpMyType
{
    bool operator()(MyType const& lhs, MyType const& rhs) const
    {
        // Implementation of the comparison logic...
    }
};

Perhatikan bahawa pengendali perbandingan ini mesti menentukan susunan yang ketat. Khususnya, jika CmpMyType()(a, b) mengembalikan benar, maka CmpMyType()(b, a) mesti mengembalikan palsu. Jika kedua-dua ungkapan dinilai palsu, unsur-unsur dianggap sama dan tergolong dalam kelas kesetaraan yang sama. Dengan mematuhi keperluan ini, anda boleh melanjutkan kefungsian kelas kunci anda untuk berfungsi sebagai kunci yang sah dalam std::map.

Atas ialah kandungan terperinci Apakah Keperluan Utama yang Mesti Dipuaskan Kelas untuk Digunakan sebagai Key in std::map?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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