unordered_map
是基於雜湊表實現的容器,查詢效率接近 O(1)。它不對元素排序,適合需要高效查詢的場景。
特性
- 元素不排序,儲存順序不可預測。
- 查詢、插入、刪除平均效率為 O(1)。
- 需要為自訂型別提供雜湊函數。
成員函數介紹
- insert:插入鍵值對(自動排序,忽略重複)。
- erase:移除指定鍵、迭代器或範圍的元素。
- size:返回容器中鍵值對的數量。
- find:搜尋指定鍵,返回指向鍵值對的迭代器(iterator),如果找不到則返回
end()
。 - count:返回指定鍵的出現次數(結果為 0 或 1,因為鍵不會重複)。
- empty:返回容器是否為空。
- clear:移除所有鍵值對,清空容器。
- begin:返回指向第一個元素的迭代器。
- end:返回指向集合末尾的迭代器。
- rbegin:返回指向最後一個元素的反向迭代器。
- rend:返回指向反向起點的迭代器。
用法範例
unordered_map
的用法與 map
大致相同。
#include <iostream>
#include <unordered_map>
#include <string>
using namespace std;
int main() {
// 建立映射
unordered_map<string, int> scores;
// 新增鍵值對
scores["小明"] = 85;
scores["小華"] = 90;
scores["小美"] = 95;
// 透過鍵存取值
int score = scores["小明"]; // score=85
// 遍歷映射
cout << "所有分數:";
for (const auto& pair : scores) {
cout << pair.first << ": " << pair.second << " ";
}
cout << endl;
// 尋找指定元素
if (scores.find("小華") != scores.end())
{
// 元素存在
}
else
{
// 元素不存在
}
// 刪除鍵值對
scores.erase("小華");
return 0;
}
適用場景
- 需要高效查詢且不關心元素順序時。
- 處理大量資料時優先考慮。
類似容器
其他類似的功能可以參考以下STL容器:
- map
- multimap