c ++比较unordered_map哈希键

时间:2016-01-21 16:49:46

标签: c++ c++11

我需要比较2 std :: unordered_map以检查它们是否具有相同的键和相应的值。

Map键是字符串并获得一些性能我想知道是否可以比较它们的计算哈希值而不是原始字符串值(不关心由于冲突可能的“误报”)。

有没有一种简单的方法可以实现这一目标? 类似的东西:

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;       
}

2 个答案:

答案 0 :(得分:1)

大多数哈希表实现都不会将给定项的计算哈希值存储在任何位置。哈希仅用于派生存储桶。由于这两个地图可能具有不同数量的存储桶,因此您甚至无法通过存储桶索引进行比较。

所以,底线:你不能这样做。

答案 1 :(得分:1)

解决这个问题的一种方法是在地图中使用一对作为您的值。该对可以由您的哈希值类型和数据类型组成。插入地图时,对密钥进行散列并将其作为一对传递给您。然后,您可以进行密钥哈希比较。如上所述,哈希值不会被存储,因为它们仅在访问时使用。

这就是说,哈希根据容器的大小而变化,所以你会遇到其他问题。