La boost::hash_combine
función de plantilla toma una referencia a un hash (llamado seed
) y un objeto v
. Según los documentos , se combina seed
con el hash de v
by
seed ^= hash_value(v) + 0x9e3779b9 + (seed << 6) + (seed >> 2);
Puedo ver que esto es determinista. Veo por qué se usa un XOR.
Apuesto a que la adición ayuda a mapear valores similares ampliamente separados para que las tablas hash de prueba no se rompan, pero ¿alguien puede explicar cuál es la constante mágica?