Mengkhususkan std::hash
Untuk memanfaatkan bekas yang tidak dipesan dengan yang ditentukan pengguna jenis kunci, seperti std::unordered_set
Setelah menyiasat pelbagai sumber, termasuk Standard C, menjadi jelas bahawa adalah mungkin untuk mengkhususkan std::hash
namespace std { template <> inline size_t hash<X>::operator()(const X& x) const { return hash<int>()(x.id); } }
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
Sintaks yang betul untuk pengkhususan std::hash
namespace std { template <> struct hash<X> { size_t operator()(const X& x) const { // Your custom hash function implementation } }; }
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 }; }
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!