Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Menyediakan Fungsi Cincang Lalai untuk Jenis Tersuai dalam Bekas Tidak Tertib C?

Bagaimanakah Saya Boleh Menyediakan Fungsi Cincang Lalai untuk Jenis Tersuai dalam Bekas Tidak Tertib C?

Linda Hamilton
Linda Hamiltonasal
2024-11-30 20:04:13883semak imbas

How Can I Provide a Default Hash Function for Custom Types in C   Unordered Containers?

Mengkhususkan std::hash untuk Jenis Tersuai dalam Bekas Tidak Tersusun

Dalam bekas tidak tersusun seperti std::unordered_set dan std::unordered_map, menyokong jenis kunci tersuai memerlukan penyediaan kedua-dua operator == dan fungsi pencincangan. Walaupun mudah untuk menggunakan fungsi cincang tersuai, adalah wajar untuk mempunyai cincang lalai untuk jenis tersuai yang serupa dengan jenis terbina dalam.

Untuk mencapai ini, seseorang boleh mengkhususkan std::hash untuk Kekunci jenis tersuai. Walau bagaimanapun, ini menimbulkan persoalan tentang kesahihan, pematuhan dan mudah alihnya.

Legaliti

Menentukan pengkhususan dalam ruang nama std adalah dibenarkan dan, sebenarnya, digalakkan untuk kes suka ini.

Pematuhan

Cara yang betul untuk mengkhususkan std::hash ialah dengan mentakrifkan struct tersuai dalam ruang nama std. Coretan kod berikut menunjukkan sintaks yang betul:

namespace std {
  template <> struct hash<Foo> {
    size_t operator()(const Foo &x) const {
      // Hashing logic for custom type
    }
  };
}

Kemudahalihan

Kaedah pengkhususan std::hash ini mudah alih merentas pengkompil utama seperti g dan MSVC.

Tambahan Ciri

Selain daripada std::hash, seseorang juga boleh mengkhususkan fungsi lain seperti std::less, std::equal_to dan std::swap untuk jenis tersuai untuk meningkatkan kefungsian.

Kesimpulan

Dengan mengkhususkan std::hash, seseorang boleh menyediakan fungsi cincang lalai untuk jenis tersuai dalam bekas tidak tersusun, menjadikannya lebih mudah untuk menggunakannya dalam bekas perpustakaan standard. Pendekatan ini adalah sah dan mudah alih sambil mematuhi piawaian C 11.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menyediakan Fungsi Cincang Lalai untuk Jenis Tersuai dalam Bekas Tidak Tertib C?. 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