0

我想将v8::Persistent<v8::Object>句柄存储在哈希类型容器(更准确地说是 Google dense_hash_set)中。我需要为此实现自己的哈希函数吗?我可以依靠v8::Object::GetIdentityHash哈希值的方法吗?查看代码我可以看到它们基本上只是为对象生成一个随机的 32 位数字并缓存它。这足以避免哈希冲突吗?

4

1 回答 1

1

我的回答是,是的,它可以用作哈希键,但是...

据此,:_int v8::Object::GetIdentityHash()

返回此对象的身份哈希。

当前的实现使用对象上的隐藏属性来存储身份哈希。

返回值永远不会是 0。此外,它不保证是唯一的。

它可能会为不同的对象生成相同的键,并且您可能会发生冲突。然而,放弃这个功能还不够。

问题是保持低碰撞率。它取决于GetIdentityHash哈希表的分布和大小。

您可以对其进行测试并计算碰撞次数并检查它是否会损害您的性能?!

于 2013-03-09T07:43:35.457 回答