從某些來源^,我得到一個長度爲20(SHA-1)的特定數據(比如文件或字節塊)的哈希緩衝區。如果這個給定的散列(認爲它是字符串,而不是散列)是而不是在地圖中找到,那麼我會提取更多信息,並將此信息與此散列一起插入。要清楚:散列的unordered_map
unordered_map<Hash_of_20_Bytes, Information>
這是我的地圖。密鑰將是一個20字節的緩衝區,並且Information
是一些包含詳細信息的結構。所以,如果來源^給了我一些散列,我會查找散列到這個信息地圖,並適當地使用/生成。
重點是,在我的情況下,給定的20字節散列保證沒有任何衝突。然而,unordered_map
仍然會計算密鑰的(FNV)散列(密鑰本身就是散列!)。我不能指示收集類不是來生成散列,而是使用該鍵具有唯一鍵本身(以確保O(1))?
我不確定unordered_map
是否也計算整數的散列(即減少額外計算的需要)。
一種方法是使用pair<20-byte, Info>
自身的向量,並進行二分搜索。然而,爲了避免哈希計算(通過散列容器)的懲罰,它會導致更多的保持向量排序的懲罰)。
['std :: unordered_map'](http://en.cppreference.com/w/cpp/container/unordered_map)允許您設置要使用的散列函數。通常使用一個特殊的「類型」的密鑰,然後有專門的['std :: hash'](http://en.cppreference.com/w/cpp/utility/hash)該類型。 –