boost::hash_combine
テンプレート関数は、ハッシュ(と呼ばれる参照取りseed
)及びオブジェクトv
。docsによると、それseed
はv
by のハッシュと結合します
seed ^= hash_value(v) + 0x9e3779b9 + (seed << 6) + (seed >> 2);
これは決定論的であることがわかります。XORが使用される理由がわかります。
追加は、類似した値を広く分離してマッピングするのに役立つので、ハッシュテーブルをプローブしても問題が発生しないと思いますが、誰かが魔法の定数を説明できますか?