在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時可能會得到不同的順序。