Die boost::hash_combine
Vorlagenfunktion verweist auf einen Hash (aufgerufen seed
) und ein Objekt v
. Laut den Dokumenten wird es seed
mit dem Hash von v
by kombiniert
seed ^= hash_value(v) + 0x9e3779b9 + (seed << 6) + (seed >> 2);
Ich kann sehen, dass dies deterministisch ist. Ich verstehe, warum ein XOR verwendet wird.
Ich wette, der Zusatz hilft bei der Abbildung ähnlicher Werte weit auseinander, damit die Hash-Tabellen nicht zusammenbrechen. Aber kann jemand erklären, was die magische Konstante ist?