Mengkhususkan std::hash untuk Jenis Ditentukan Pengguna dalam Bekas Tidak Teratur
Untuk mendayakan penggunaan jenis kunci tersuai dalam std::unordered_set dan std::unordered_map, seseorang mesti menyediakan kedua-dua pengendali kesamaan dan fungsi cincang. Ini biasanya melibatkan penentuan struct atau kelas tersuai yang melaksanakan pengendali ini. Walau bagaimanapun, adalah lebih mudah untuk menggunakan fungsi cincang lalai untuk jenis yang ditentukan pengguna, serupa dengan jenis terbina dalam yang disediakan oleh pengkompil dan pustaka.
Menurut Draf Standard C N3242 dan Boost.Unordered , adalah mungkin untuk mengkhususkan std::hash untuk jenis tersuai. Ini melibatkan penambahan pengkhususan pada ruang nama std:
namespace std { template <> inline size_t hash<X>::operator()(const X& x) const { return hash<int>()(x.id); } }
Dalam contoh ini, fungsi cincang untuk jenis X dikhususkan untuk menggunakan fungsi cincang untuk jenis int, yang menganggap bahawa X mempunyai id pembolehubah ahli. Adalah penting untuk ambil perhatian bahawa fungsi cincang mesti dikhususkan untuk jenis hujah templat tertentu dan nilai cincang yang terhasil mestilah konsisten dengan pengendali kesamaan untuk jenis tersebut.
Legaliti dan Mudah Alih:
namespace std { template <> struct hash<X> { size_t operator()(const X& x) const { return hash<int>()(x.id); } }; }
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengkhususkan `std::hash` untuk Jenis Ditentukan Pengguna Saya dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!