我想在哈希类型容器(更准确地说是Google v8::Persistent<v8::Object>
)中存储dense_hash_set
个句柄。我需要为此实现自己的哈希函数吗?我可以依赖v8::Object::GetIdentityHash
方法获取哈希值吗?在代码中我可以看到它们基本上只是为对象生成一个随机的32位数字并缓存它。这足以避免哈希冲突吗?
答案 0 :(得分:1)
我的回答是,是的,它可以用作哈希键,但是......
根据this,int v8::Object::GetIdentityHash()
:
返回此对象的标识哈希值。
当前实现使用对象的隐藏属性 存储身份哈希。
返回值永远不会为0.此外,它不能保证 唯一的。
它可能会为不同的对象生成相同的键,并且您可能会发生冲突。然而,放弃这个功能还不够。
问题是保持低碰撞率。它取决于GetIdentityHash
的分布和哈希表的大小。
你可以测试它并计算碰撞并检查它是否会损害你的表现?!