Menggabungkan Nilai Hash dalam C 0x
C 0x memperkenalkan hash<> templat, yang menyediakan fungsi cincang generik. Walau bagaimanapun, fungsi hash_combine, seperti yang dilaksanakan dalam Boost, tidak disertakan secara asli. Artikel ini meneroka kaedah praktikal untuk melaksanakan fungsi sedemikian dalam C 0x.
Penyelesaian menggunakan xor_combine
Satu pendekatan ialah memanfaatkan xor_combine C 0x. Fungsi ini menggabungkan dua nilai hash dengan XORing mereka. Berikut ialah contoh pelaksanaan:
template<class T> inline void hash_combine(std::size_t& seed, const T& v) { seed ^= hash<T>{}(v); }
Kaedah ini hanya XOR cincang nilai v dengan benih.
Penyelesaian menggunakan gabungan hash_Boost
Sebagai alternatif, anda boleh menyesuaikan pelaksanaanBoost bagi hash_combine:
template<class T> inline void hash_combine(std::size_t& seed, const T& v) { std::hash<T> hasher; seed ^= hasher(v) + 0x9e3779b9 + (seed << 6) + (seed >> 2); }
Fungsi ini mengira cincangan v menggunakan std::hash<> dan menggabungkannya dengan theseed menggunakan operasi XOR bitwise.
Kedua-dua pendekatan menyediakan kaedah untuk menggabungkan nilai cincang dalam C 0x. Pilihan pelaksanaan bergantung pada keperluan khusus aplikasi.
Atas ialah kandungan terperinci Bagaimana untuk Menggabungkan Nilai Hash dengan Cekap dalam C 0x?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!