Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Mengkhususkan `std::hash::operator()` untuk Jenis Tersuai dalam C ?

Bagaimanakah Saya Boleh Mengkhususkan `std::hash::operator()` untuk Jenis Tersuai dalam C ?

Susan Sarandon
Lepaskan: 2024-11-30 00:35:14
asal
394 orang telah melayarinya

How Can I Specialize `std::hash::operator()` for Custom Types in C  ?

Mengkhususkan std::hash::operator() untuk Jenis Ditentukan Pengguna

Untuk memanfaatkan bekas yang tidak dipesan dengan yang ditentukan pengguna jenis kunci, seperti std::unordered_set dan std::unordered_map, anda biasanya perlu mentakrifkan operator==(Key, Key) dan functor hash. Walau bagaimanapun, adalah lebih baik untuk menggunakan fungsi cincang lalai untuk jenis sedemikian, seperti yang berlaku untuk jenis terbina dalam.

Setelah menyiasat pelbagai sumber, termasuk Standard C, menjadi jelas bahawa adalah mungkin untuk mengkhususkan std::hash::operator() untuk jenis yang ditentukan pengguna. Coretan kod berikut menunjukkan pengkhususan sedemikian:

namespace std {
  template <>
  inline size_t hash<X>::operator()(const X& x) const {
    return hash<int>()(x.id);
  }
}
Salin selepas log masuk

Sekarang, mari kita atasi soalan yang dibangkitkan:

1. Kesahan Pengkhususan

Menambahkan pengkhususan pada ruang nama std bukan sahaja dibenarkan tetapi digalakkan. Ia membenarkan lanjutan keupayaan standard untuk menyokong jenis yang ditentukan pengguna.

2. Versi Mematuhi std::hash::operator()

Sintaks yang betul untuk pengkhususan std::hash::operator() adalah seperti berikut:

namespace std {
  template <>
  struct hash<X> {
    size_t operator()(const X& x) const {
      // Your custom hash function implementation
    }
  };
}
Salin selepas log masuk

3. Penyelesaian Mudah Alih

Pengkhususan std::cincang yang ditunjukkan sebelum ini memerlukan keserasian C 11, yang mungkin tidak disokong secara universal oleh penyusun. Untuk meningkatkan kemudahalihan, pertimbangkan untuk menggunakan ruang nama bukan standard, cth.:

namespace ht {
  template <>
  struct hash<X> {
    // Your custom hash function implementation
  };
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengkhususkan `std::hash::operator()` untuk Jenis Tersuai dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan