我正在寻找具有关联属性的 hash_combine
函数。
例如,我希望能够依次组合值 a、b、c、d 以获得序列的哈希键,或者组合 a 和 b,然后组合 c 和 d,然后组合结果。这两种方法应该给出相同的结果。
boost::hash_combine
没有那个属性:
// a * b * c * d
std::size_t seed = 0;
boost::hash_combine(seed, 234);
boost::hash_combine(seed, 62);
boost::hash_combine(seed, 675);
boost::hash_combine(seed, 916);
std::cout << seed << std::endl; // 706245846748881
// (a * b) * (c * d)
std::size_t seed1 = 0;
boost::hash_combine(seed1, 234);
boost::hash_combine(seed1, 62);
std::size_t seed2 = 0;
boost::hash_combine(seed2, 675);
boost::hash_combine(seed2, 916);
boost::hash_combine(seed1, seed2); // 11337801211148
有什么好的hash_combine
函数吗?
P.S.:这样做的原因是我将散列键分配给在 DAG 中找到的序列。我正在运行动态编程来查找所有状态对(之间的序列)的哈希键。
最佳答案
普通异或怎么样?
std::size_t seed = 0;
seed ^= boost::hash_value(234);
seed ^= boost::hash_value(62);
...
关于c++ - 具有关联属性的 boost::hash_combine 的替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6038105/