在c++中使用unordered_map实现哈希表并处理冲突

Implementation of hash table using unordered_map in c++ and handling collisions

本文关键字:哈希表 实现 处理 冲突 map c++ unordered      更新时间:2023-10-16

如何在c++中使用无序映射实现哈希映射。如果无序映射中的键对应于哈希函数生成的索引,当有多个值具有相同的键(冲突)时该怎么办?那么我们如何使用相同的键来访问这些值呢?

unordered_map <int,string> hashTable;
hashTable.insert(pair<int,string>(3,"ab"))
hashTable.insert(pair<int,string>(3,"ba"))

现在如何访问"ba"?

正如@amchacon指出的,std::unordered_map已经是一个哈希表了。

键和散列(key)是有区别的。在unordered_map中,键必须是不同的,而键的散列可能会冲突。仔细看看std::unordered_map的模板参数。这里有一个Hash和一个KeyEqual

如果您确实想使用相同的键有多个记录,请使用std::unordered_multimap。

hashTable[3]实际上是"ba"

你可以这样搜索

auto it = hashTable.find(3);
if(it!=hashTable.end()){
   std::cout << "item found" << it->second << "n";
}else{
   std::cout << "item does not exists in table.";
}