Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Menggabungkan Nilai Hash dengan Berkesan dalam C 0x?
Menggabungkan Nilai Hash dalam C 0x
C 0x memperkenalkan cincang<>() untuk memudahkan pencincangan dalam perpustakaan standard. Walau bagaimanapun, ia tidak mempunyai fungsi hash_combine terbina dalam serupa dengan pelaksanaan Boost. Ini menimbulkan persoalan tentang cara meniru fungsi sedemikian dalam C 0x.
C 0x xor_combine vs. Boost's hash_combine
Fungsi hash_combine Boost menjalankan operasi bitwise untuk menggabungkan berbilang dengan cekap nilai hash menjadi satu. Walaupun C 0x menyediakan xor_combine, ia bukan pengganti langsung untuk hash_combine. xor_combine hanya boleh digunakan untuk menggabungkan dua nilai hash, manakala hash_combine mengendalikan bilangan nilai sewenang-wenangnya.
Melaksanakan hash_combine dalam C 0x
Untuk melaksanakan hash_combine, dalam C 0 seseorang boleh mengambil inspirasi daripada pendekatan Boost. Berikut ialah pelaksanaan yang mudah:
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); }
Pelaksanaan ini meniru algoritma Boost, menggunakan gabungan operasi XOR, peralihan bit dan penambahan berterusan untuk memastikan pencampuran menyeluruh nilai cincang.
Dengan memanfaatkan fungsi hash_combine ini, anda boleh menggabungkan berbilang nilai cincang ke dalam satu hasil dengan mudah menggunakan pencincangan berkuasa C 0x keupayaan.
Atas ialah kandungan terperinci Bagaimana untuk Menggabungkan Nilai Hash dengan Berkesan dalam C 0x?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!