C++ 无冲突地散列大键

C++ 无冲突地散列大键,c++,hash,unordered-map,C++,Hash,Unordered Map,我正在写一个跳棋引擎。我知道标准(zorbrist)散列方案,但是由于我的引擎的性质,它们是不合适的。任何类型的碰撞都会导致灾难性错误 为了解决这个问题,我想使用董事会状态的整个(唯一)表示作为键。这应该不是问题,因为状态是由6个32位无符号整数确定的。这在python中运行,除了速度之外没有任何问题。在C++中,我使用的是STD::unOrdEdjMava.< 我试图实现这一点的每一种方法都失败了。我尝试了一对boost::uint_type128作为密钥。同样,需要保证不会发生冲突。自己编写

我正在写一个跳棋引擎。我知道标准(zorbrist)散列方案,但是由于我的引擎的性质,它们是不合适的。任何类型的碰撞都会导致灾难性错误

为了解决这个问题,我想使用董事会状态的整个(唯一)表示作为键。这应该不是问题,因为状态是由6个32位无符号整数确定的。这在python中运行,除了速度之外没有任何问题。在C++中,我使用的是STD::unOrdEdjMava.<
我试图实现这一点的每一种方法都失败了。我尝试了一对boost::uint_type128作为密钥。同样,需要保证不会发生冲突。

自己编写“哈希”代码?不完全确定为什么碰撞是死亡。散列应该偶尔发生冲突。哈希冲突死亡是因为运行时命中、动态内存命中还是其他原因?知道了这一点,我们也许可以提出一些其他的O(1)风格的搜索…哈希表有移动信息作为条目。冲突会导致非法移动和垃圾位置污染搜索树。如果您想要快速搜索,则必须使用本机支持的类型<通常使用code>std::size\u t,但这不能保证6 x 32位值的唯一性。如果你被击中,你必须检查是否相等。否则,您将不得不使用6 x 32位来存储唯一值。
std::unordered_map
不关心散列是否相同,只要键本身不同。听起来你使用的是256位的键,所以我看不出问题所在。“任何类型的冲突都会导致灾难性的错误。”--这告诉我散列是不存在的,在你的问题中没有位置。