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