La boost::hash_combinefunzione template prende un riferimento a un hash (chiamato seed) e un oggetto v. Secondo i documenti , si combina seedcon l'hash di vby
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?