在哈希容器中存储持久性v8对象句柄

时间:2013-03-09 06:44:01

标签: c++ v8

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

1 个答案:

答案 0 :(得分:1)

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

根据thisint v8::Object::GetIdentityHash()

  

返回此对象的标识哈希值。

     

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

     

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

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

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

你可以测试它并计算碰撞并检查它是否会损害你的表现?!