Hàm boost::hash_combine
khuôn mẫu nhận tham chiếu đến một hàm băm (được gọi seed
) và một đối tượng v
. Theo tài liệu , nó kết hợp seed
với các hash của v
bằng
seed ^= hash_value(v) + 0x9e3779b9 + (seed << 6) + (seed >> 2);
Tôi có thể thấy rằng điều này là xác định. Tôi hiểu tại sao XOR được sử dụng.
Tôi cá rằng việc bổ sung sẽ giúp ánh xạ các giá trị tương tự cách xa nhau một cách rộng rãi để việc thăm dò các 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ì không?