0
我想存儲v8::Persistent<v8::Object>
手柄在哈希類型的容器(更準確地說是谷歌dense_hash_set
)。我是否需要爲此執行我自己的hasher功能?我可以依靠v8::Object::GetIdentityHash
方法獲取散列值嗎?戳代碼我可以看到它們基本上只是爲對象生成一個隨機的32位數字並緩存它。這足以避免散列衝突嗎?存儲持久V8對象處理的散列容器
我想存儲v8::Persistent<v8::Object>
手柄在哈希類型的容器(更準確地說是谷歌dense_hash_set
)。我是否需要爲此執行我自己的hasher功能?我可以依靠v8::Object::GetIdentityHash
方法獲取散列值嗎?戳代碼我可以看到它們基本上只是爲對象生成一個隨機的32位數字並緩存它。這足以避免散列衝突嗎?存儲持久V8對象處理的散列容器
我的回答是,是的,它可以被用來作爲哈希鍵,但...
據this,int v8::Object::GetIdentityHash()
:
返回該對象的標識哈希。
當前實現使用對象上的隱藏屬性 存儲相同散列。
返回值永遠不會是0。此外,它不能保證 獨特。
它可能會爲不同的對象生成相同的密鑰,並且可能會發生衝突。但是放棄這個功能的理由不夠充分。
的問題是保持碰撞的低利率。這取決於GetIdentityHash
的分佈和散列表的大小。
您可以測試並計算碰撞,並檢查它是否損害你的表現與否?