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