在C++中,<unordered_map>是标准模板库(STL)的一部分,提供了一种基于哈希表的键值对容器。
与std::map不同的是,<unordered_map>不保证元素的排序,但是通常提供更快的查找速度。
<unordered_map>是一个关联容器,他存储了键值对(Key_value pairs),其中每个键都是唯一的,<unordered_map>用哈希表来存储元素,这使得他在查找、插入和操作中具有常数时间复杂度。
语法
以下是unordered_map的基本用法:
#include<unordered_map>
std::unordered_map<ket_type,value_type> map_name;
key_type是键的类型
value_type是值的类型
构造函数
//默认构造:
std::unordered_map<int,std::string> myMap;
//构造并初始化
std::unordered_map<int,std::string> myMap={{1,"one"},{2,"two"}};
//构造并指定初始容量
std::unordered_map<int,std::string> myMap(10);
//构造并复制另一个
std::unoredered_map<int,std::string> other=myMap;
基本操作
插入元素:
MyMap.insert({3,"three"});
访问元素:
std::string value=myMap[1]; //获取键为1的值
删除元素:
myMap.erase(1); //删除键为1的元素
查找元素:
auto it=myMap.find(2) // 查找键为2的元素
if(it!=myMap.end()){
std::cout<<"Found"<<it->second<<std::endl;
}
#include <iostream>
#include <unordered_map>
int main() {
// 创建一个 unordered_map,键为 int,值为 string
std::unordered_map<int, std::string> myMap;
// 插入一些键值对
myMap[1] = "one";
myMap[2] = "two";
myMap[3] = "three";
// 打印所有元素
for (const auto& pair : myMap) {
std::cout << "Key: " << pair.first << ", Value: " << pair.second << std::endl;
}
// 访问特定键的值
std::cout << "Value for key 2: " << myMap[2] << std::endl;
// 删除键为1的元素
myMap.erase(1);
// 再次打印所有元素
std::cout << "After erasing key 1:" << std::endl;
for (const auto& pair : myMap) {
std::cout << "Key: " << pair.first << ", Value: " << pair.second << std::endl;
}
return 0;
}
注意事项
unordered_map
不保证元素的顺序,因此元素的迭代顺序可能在不同的运行中不同。- 哈希表的性能依赖于良好的哈希函数,以避免过多的哈希冲突。
- 与
std::map
相比,unordered_map
在元素数量较少时可能占用更多的内存。