一、unordered_map
- unordered_map 是 C++ STL 中的一个关联容器,它有如下特点
-
unordered_map 存储键值对,使用哈希表实现
-
unordered_map 的每个键在容器中只能出现一次
-
unordered_map 的存储的键值对是无序的
-
平均情况下,查找、插入、删除都是 O(1) 时间复杂度
二、声明与初始化
#include <iostream>
#include <unordered_map>
#include <string>using namespace std;int main()
{// 空 unordered_mapunordered_map<string, int> map1;// 初始化 unordered_mapunordered_map<string, int> map2 = {{"Alice", 25},{"Bob", 30} };return 0;
}
三、插入元素
#include <iostream>
#include <unordered_map>
#include <string>using namespace std;int main()
{unordered_map<string, int> wordCount;// 使用 insert 方法wordCount.insert({ "apple", 3 });// 使用 operator[]wordCount["banana"] = 2;// 使用 emplace 方法wordCount.emplace("cherry", 5);return 0;
}
四、访问元素
1、演示
#include <iostream>
#include <unordered_map>
#include <string>using namespace std;int main()
{unordered_map<string, int> map = {{"Alice", 25},{"Bob", 30} };// 使用 operator[]cout << map["Alice"] << endl;cout << map["Bob"] << endl;// 使用 at 方法try {int result = map.at("Tom");}catch (out_of_range& e) {cout << "Key not found" << endl;}return 0;
}
# 输出结果25
30
Key not found
2、注意事项
- 使用
operator[]
访问,如果元素不存在,会创建新元素
#include <iostream>
#include <unordered_map>
#include <string>using namespace std;int main()
{unordered_map<string, int> map = {{"Alice", 25},{"Bob", 30} };cout << "unordered_map 大小为:" << map.size() << endl;cout << map["Tom"] << endl;cout << "unordered_map 大小为:" << map.size() << endl;return 0;
}
# 输出结果unordered_map 大小为:2
0
unordered_map 大小为:3
五、遍历元素
#include <iostream>
#include <unordered_map>
#include <string>using namespace std;int main()
{unordered_map<string, int> map = {{"Alice", 25},{"Bob", 30} };// 使用迭代器for (auto it = map.begin(); it != map.end(); it++) {cout << it->first << ": " << it->second << endl;}cout << "----------" << endl;// 使用范围 for 循环for (auto& it : map) {cout << it.first << ": " << it.second << endl;}return 0;
}
# 输出结果Alice: 25
Bob: 30
----------
Alice: 25
Bob: 30
六、删除元素
#include <iostream>
#include <unordered_map>
#include <string>using namespace std;int main()
{unordered_map<string, int> map = {{"Alice", 25},{"Bob", 30},{"Tom", 35} };cout << "unordered_map 大小为:" << map.size() << endl;// 通过键删除map.erase("Bob");cout << "erase 操作之后,unordered_map 大小为:" << map.size() << endl;// 全部删除map.clear();cout << "clear 操作之后,unordered_map 大小为:" << map.size() << endl;return 0;
}
# 输出结果unordered_map 大小为:3
erase 操作之后,unordered_map 大小为:2
clear 操作之后,unordered_map 大小为:0
七、查找元素
#include <iostream>
#include <unordered_map>
#include <string>using namespace std;int main()
{unordered_map<string, int> map = {{"Alice", 25},{"Bob", 30} };auto it1 = map.find("Alice");if (it1 != map.end()){cout << it1->second << endl;}else {cout << "Key not found" << endl;}auto it2 = map.find("Tom");if (it2 != map.end()){cout << it2->second << endl;}else {cout << "Key not found" << endl;}return 0;
}
# 输出结果25
Key not found