在C++中,unordered_map是一个使用哈希表实现的无序关联容器,碰撞(collision)是指多个键映射到同一个哈希值的情况。unordered_map内部采用链地址法来解决碰撞问题,即在哈希表中每个桶(bucket)存储一个链表或红黑树,相同哈希值的键值对被存储在同一个桶中。
当遍历unordered_map时,可以使用迭代器来访问每个键值对,无需担心碰撞的问题,因为unordered_map在内部已经处理了碰撞。以下是一个简单的示例代码,展示如何遍历unordered_map:
#include <iostream>
#include <unordered_map>
int main() {
std::unordered_map<int, std::string> myMap = {
{1, "apple"},
{2, "banana"},
{3, "cherry"}
};
// 使用迭代器遍历unordered_map
for (auto it = myMap.begin(); it != myMap.end(); ++it) {
std::cout << "Key: " << it->first << ", Value: " << it->second << std::endl;
}
return 0;
}
在上面的代码中,我们首先创建了一个unordered_map对象myMap,并初始化了一些键值对。然后使用迭代器it遍历unordered_map,输出每个键值对的键和值。
需要注意的是,unordered_map的遍历顺序不是按照插入顺序或键的顺序,而是按照哈希值的顺序进行的。因此,遍历unordered_map时可能会得到不同的顺序。