El boost::hash_combine
La fonction modèle prend une référence à un hachage (appelé seed
) et un objet v
. Selon le docs il combine seed
avec le hachage de v
par
seed ^= hash_value(v) + 0x9e3779b9 + (seed << 6) + (seed >> 2);
Je peux voir que c'est déterministe. Je vois pourquoi on utilise un XOR.
Je parie que l'addition aide à mettre en correspondance des valeurs similaires très éloignées les unes des autres, de sorte que le sondage des tables de hachage ne tombe pas en panne, mais quelqu'un peut-il expliquer ce qu'est la constante magique ?
0 votes
Étant donné que sur de nombreux ordinateurs, une rotation d'entier coûte à peu près la même chose qu'un décalage, y a-t-il un avantage à convertir l'expression en : <code> seed ^= hash_value(v) + 0x9e3779b9 + rotl(seed, 6) + rotr(seed, 2) ; </code>