2013-03-09 40 views
0

我想存儲v8::Persistent<v8::Object>手柄在哈希類型的容器(更準確地說是谷歌dense_hash_set)。我是否需要爲此執行我自己的hasher功能?我可以依靠v8::Object::GetIdentityHash方法獲取散列值嗎?戳代碼我可以看到它們基本上只是爲對象生成一個隨機的32位數字並緩存它。這足以避免散列衝突嗎?存儲持久V8對象處理的散列容器

回答

1

我的回答是,是的,它可以被用來作爲哈希鍵,但...

thisint v8::Object::GetIdentityHash()

返回該對象的標識哈希。

當前實現使用對象上的隱藏屬性 存儲相同散列。

返回值永遠不會是0。此外,它不能保證 獨特。

它可能會爲不同的對象生成相同的密鑰,並且可能會發生衝突。但是放棄這個功能的理由不夠充分。

的問題是保持碰撞的低利率。這取決於GetIdentityHash的分佈和散列表的大小。

您可以測試並計算碰撞,並檢查它是否損害你的表現與否?

相關問題