Функция шаблона boost :: hash_combine
принимает ссылку на хэш (называемый seed
) и объект v
. Согласно документам , он объединяет seed
с хешем v
по
seed ^= hash_value(v) + 0x9e3779b9 + (seed << 6) + (seed >> 2);
. Я вижу, что это детерминировано. Я понимаю, почему используется XOR.
Бьюсь об заклад, это добавление помогает отображать одинаковые значения на значительном расстоянии друг от друга, так что хеш-таблицы не сломаются, но может кто-нибудь объяснить, что такое магическая константа?