C++ unordered_map(STL) 用法與範例
在 C++ 標準模板庫(STL)中,unordered_map
和 map
都是用於儲存鍵值對的容器,但它們在內部資料結構、效能和適用情境上有顯著差異。
unordered_map 是基於哈希表(hash table) 實現的,它使用哈希函數將鍵映射到數據儲存的桶(bucket) 中,每個 bucket 可以儲存一個或多個元素。由於是基於 hash table,元素不會按照任何特定順序儲存。unordered_map 在平均情況下,插入、刪除和查找操作的時間複雜度為 O(1),但在最壞情況下,如發生大量哈希碰撞,這些操作的時間複雜度可能退化到 O(n)。
相對地,map 通常基於紅黑樹實現,這是一種自平衡二元搜尋樹。map 儲存的元素按鍵的排序順序組織,使得元素始終處於排序狀態。因此,map 在插入、刪除和查找操作的時間複雜度穩定為 O(log n)。
初始化
創建一個空的 unordered_map
#include <unordered_map>
using namespace std;
unordered_map<string, int> umap;
利用現有數組創建 unordered_map
#include <unordered_map>
#include <string>
using namespace std;
unordered_map<string, int> umap {
{"apple", 2},
{"banana", 3},
{"orange", 4}
};
操作
插入元素:umap.insert()
- 插入一個新的 key value pair,如果 key 已存在則操作無效。
- Time Complexity: 平均 O(1), 最壞 O(n)
- 返回值:一個包含迭代器和布林值的 pair<iteraotr, bool>。如果插入成功,布林值為 true;否則為 false。
auto result = umap.insert(make_pair("cherry", 5));
if (result.second) {
cout << "Insert successful" << endl;
} else {
cout << "Element already exists" << endl;
}