Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Memanjangkan Fungsi Hash Standard untuk Jenis Tersuai dalam Bekas Tidak Tertib C?

Bagaimana untuk Memanjangkan Fungsi Hash Standard untuk Jenis Tersuai dalam Bekas Tidak Tertib C?

Barbara Streisand
Barbara Streisandasal
2024-12-04 17:46:111078semak imbas

How to Extend the Standard Hash Function for Custom Types in C   Unordered Containers?

Melanjutkan Hash Standard untuk Jenis Tersuai dalam Bekas Tidak Tertib

Untuk menggunakan jenis yang ditentukan pengguna sebagai kunci dalam bekas yang tidak tersusun seperti std::unordered_set dan std:: unordered_map, adalah perlu untuk melaksanakan pengendali kesamaan (operator==) dan functor hash. Pendekatan yang lebih mudah ialah dengan mencipta fungsi cincang lalai khusus untuk jenis tersuai, sama dengan fungsi cincang terbina dalam yang disediakan untuk jenis standard.

Setelah meneliti pelbagai sumber, nampaknya pengkhususan std::hash< ;X>::operator() untuk jenis X yang ditentukan pengguna sememangnya boleh dilaksanakan. Walau bagaimanapun, soalan berikut timbul:

  1. Adakah dibenarkan untuk menambah pengkhususan sedemikian pada ruang nama std?
  2. Versi std::hash::operator() yang manakah , jika ada, adalah mematuhi piawaian C 11?
  3. Adakah terdapat pendekatan bebas platform untuk mencapai ini?

Memperluas Ruang Nama Standard

Piawaian C secara eksplisit membenarkan dan menggalakkan penambahan pengkhususan pada ruang nama std, dengan syarat salah satu jenis yang terlibat adalah ditentukan pengguna. Oleh itu, soalan pertama boleh dijawab secara afirmatif.

Pengkhususan Mematuhi C 11

Kaedah yang betul dan pilihan untuk mengkhususkan fungsi cincang dalam C 11 adalah untuk mentakrifkan struktur dalam ruang nama std seperti berikut :

namespace std {
  template <>
  struct hash<Foo> {
    size_t operator()(const Foo & x) const {
      // Implementation of the hash function for type Foo
    }
  };
}

Sintaks ini memastikan pematuhan dengan standard C 11 dan membolehkan spesifikasi fungsi cincang tersuai untuk jenis yang ditentukan pengguna.

Pelaksanaan Mudah Alih

Malangnya, tiada kaedah bebas platform untuk mengkhususkan std::hash::operator() dalam C . Melaksanakan fungsi cincang tersuai dalam ruang nama std memerlukan sama ada pelaksanaan khusus pengkompil atau penggunaan pustaka pihak ketiga.

Atas ialah kandungan terperinci Bagaimana untuk Memanjangkan Fungsi Hash Standard 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