A boost::hash_combine
função de modelo leva uma referência a um hash (chamado seed
) e um objeto v
. De acordo com os documentos , ele combina seed
com o hash v
por
seed ^= hash_value(v) + 0x9e3779b9 + (seed << 6) + (seed >> 2);
Posso ver que isso é determinístico. Eu vejo porque um XOR é usado.
Aposto que a adição ajuda a mapear valores semelhantes amplamente separados, de modo que as tabelas de hash de sondagem não quebram, mas alguém pode explicar o que é a constante mágica?