Rumah >pembangunan bahagian belakang >C++ >Apakah Keperluan Utama yang Mesti Ditemui Kelas untuk Digunakan sebagai Kunci dalam std::map?

Apakah Keperluan Utama yang Mesti Ditemui Kelas untuk Digunakan sebagai Kunci dalam std::map?

Susan Sarandon
Susan Sarandonasal
2024-11-28 06:43:18401semak imbas

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

Keperluan Utama untuk std::map

std::map, bekas nilai kunci dalam C , memerlukan ciri tertentu daripada kuncinya kelas untuk memastikan kefungsian yang betul. Terutamanya, keperluan berikut mesti dipenuhi:

Kebolehsalinan dan Kebolehtugasan:
Kunci peta mesti boleh disalin dan diserahkan, membolehkan nilainya disimpan dan diurus dengan cekap dalam bekas.

Operator Perbandingan:
Untuk mengekalkan pesanan structure, std::map bergantung pada operator perbandingan yang ditakrifkan untuk kelas utama. Operator ini menentukan susunan relatif kunci dan membenarkan bekas mengisih dan mendapatkan semula elemen berdasarkan nilai kunci.

Penyusunan Tegas:
Operator perbandingan untuk kelas utama mesti menentukan pesanan yang ketat. Bagi setiap pasangan kekunci a dan b, pengendali mesti memenuhi syarat berikut:

  • Jika Cmp(a, b) == benar, maka Cmp(b, a) == salah.
  • Jika kedua-dua Cmp(a, b) == false dan Cmp(b, a) == false, a dan b dianggap sama dan tergolong dalam kesetaraan yang sama kelas.

Contoh Pelaksanaan:

Jika kelas utama kekurangan pengendali yang diperlukan ini, kelas pembalut boleh dibuat untuk melaksanakannya. Sebagai contoh, kelas pembalut berikut menyediakan kefungsian perbandingan untuk struct MyType:

struct CmpMyType {
    bool operator()(MyType const& lhs, MyType const& rhs) const {
        // Comparison logic for MyType
    }
};

Dengan menggunakan kelas pembalut seperti CmpMyType, struct MyType asal boleh digunakan sebagai kunci dalam std::map tanpa mengubah suainya pelaksanaan.

Atas ialah kandungan terperinci Apakah Keperluan Utama yang Mesti Ditemui Kelas untuk Digunakan sebagai Kunci dalam 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