Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bolehkah Kelas Tersuai Saya Digunakan sebagai Kunci dalam C std::map?

Bolehkah Kelas Tersuai Saya Digunakan sebagai Kunci dalam C std::map?

Linda Hamilton
Linda Hamiltonasal
2024-11-23 09:43:13325semak imbas

Can My Custom Class Be Used as a Key in a C   std::map?

Menggunakan Kelas Arbitrari sebagai Kunci dalam std::map

std::map, komponen asas Perpustakaan Templat Standard C, dengan cekap mengaitkan pasangan nilai kunci. Apabila menggunakan kelas tersuai sebagai kunci, kriteria tertentu mesti dipenuhi untuk memastikan operasi yang sah.

Keperluan untuk Kelas Utama

Untuk kelas berfungsi sebagai kunci yang sah dalam std ::map, ia mesti memenuhi keperluan berikut:

  1. Kebolehsalinan dan Kebolehtugasan: Kunci mesti boleh disalin dan diserahkan, membolehkan penduaan dan pengubahsuaian yang cekap dalam peta.
  2. Pemesanan: Susunan elemen dalam std::map ditentukan oleh yang ketiga hujah templat atau hujah pembina yang digunakan. Secara lalai, ini lalai kepada std::less, yang menggunakan < pengendali. Walau bagaimanapun, pengendali perbandingan tersuai boleh ditakrifkan untuk menentukan kriteria pesanan alternatif.

Menentukan Operator Perbandingan Tersuai

Jika pesanan lalai tidak memenuhi keperluan anda, anda boleh menentukan pengendali perbandingan tersuai sebagai objek berfungsi. Pengendali ini mesti melaksanakan susunan yang ketat, bermakna untuk mana-mana dua kekunci a dan b, syarat berikut mesti dipegang:

  • CmpMyType()(a, b) == benar membayangkan CmpMyType()(b , a) == false
  • CmpMyType()(a, b) == false dan CmpMyType()(b, a) == false membayangkan a == b

Dengan memenuhi keperluan ini, kelas tersuai boleh digunakan dengan lancar sebagai kunci dalam std::map, membolehkan pesanan yang cekap dan mendapatkan semula nilai yang berkaitan.

Atas ialah kandungan terperinci Bolehkah Kelas Tersuai Saya Digunakan sebagai Kunci dalam C 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