2016-01-21 41 views
0

我需要比較2 std :: unordered_map以檢查它們是否具有相同的鍵和相應的值。C++ compare unordered_map hash keys

地圖鍵是字符串,並獲得一些性能我想知道是否有可能比較他們的計算散列而不是原始字符串值(不關心由於碰撞可能的「誤報」)。

有沒有簡單的方法來實現這一目標? 喜歡的東西:

std::unordered_map<std::string, MyClass*> map1; 
std::unordered_map<std::string, MyClass*> map2; 
[...] 

// make sure maps have the same size 
auto itor1 = map1.begin(); 
auto itor2 = map2.begin(); 
while(itor1 != map1.end()){ 

    // compare itor1 and itor2 hashed key 
    ++itor1; ++itor2;  
} 
+1

這個不清楚。 '比較'地圖是什麼意思?您是否試圖查看一張地圖中存在的鑰匙是否也出現在另一張地圖中?不僅僅是迭代第一張地圖,並且每個鍵都會在另一張地圖上找到()。這將是最快的方式。 – SergeyA

+0

這就是我現在要做的。我想知道哈希是否存儲/訪問到任何地方,因此遍歷映射並比較它們,節省了鍵散列和查找()每個條目的時間。 – rickyviking

回答

1

大多數哈希表實現不存儲特定項目的計算哈希值的任何地方。散列僅用於派生存儲桶。而且由於這兩個地圖的桶數可能不同,所以甚至無法通過桶索引進行比較。

所以,底線:你不能這樣做。

1

你可以解決這個問題的一種方法是在地圖中使用一對作爲你的值。這一對可以由你的散列值的類型和你的數據的類型組成。當插入你的地圖時,散列密鑰並將它與你的數據作爲一對傳遞。然後你可以做鍵哈希比較。正如上面有人所說,散列值不會被存儲,因爲它們只在訪問時才使用。

這就是說,哈希根據容器的大小而變化,所以你會遇到其他問題。