La boost::hash_combine
funzione template prende un riferimento a un hash (chiamato seed
) e un oggetto v
. Secondo i documenti , si combina seed
con l'hash di v
by
seed ^= hash_value(v) + 0x9e3779b9 + (seed << 6) + (seed >> 2);
Vedo che questo è deterministico. Capisco perché viene utilizzato uno XOR.
Scommetto che l'aggiunta aiuta a mappare valori simili ampiamente separati in modo che le tabelle hash non si interrompano, ma qualcuno può spiegare qual è la costante magica?