Hàm mẫu boost::hash_combine
lấy tham chiếu đến băm (được gọi là seed
) và một đối tượng v
. Theo docs, nó kết hợp seed
với các hash của v
bởiSố ma thuật tăng :: hash_combine
seed ^= hash_value(v) + 0x9e3779b9 + (seed << 6) + (seed >> 2);
tôi có thể thấy rằng đây là xác định. Tôi thấy lý do tại sao một XOR được sử dụng.
Tôi đặt cược phần bổ sung giúp lập bản đồ các giá trị tương tự nhau cách nhau để thăm dò bảng băm sẽ không bị hỏng, nhưng ai đó có thể giải thích hằng số ma thuật là gì?
Cho rằng trên nhiều máy tính một chi phí nguyên xoay về giống như một sự thay đổi sẽ có được bất kỳ lợi ích trong việc chuyển đổi biểu thức để:
seed ^= hash_value(v) + 0x9e3779b9 + rotl(seed, 6) + rotr(seed, 2);
–