C++ STL unordered_map容器
一、特性:map 容器中存储的数据是有序的,而 unordered_map 容器中是无序的。 可以将 unordered_map 容器等价为无序的 map 容器。
具体来讲,unordered_map 容器和 map 容器一样,以键值对(pair类型)的形式存储数据,存储的各个键值对的键互不相同且不允许被修改。但由于 unordered_map 容器底层采用的是哈希表存储结构,该结构本身不具有对数据的排序功能,所以此容器内部不会自行对存储的键值对进行排序。
二、创建:
1) 通过调用 unordered_map 模板类的默认构造函数,可以创建空的 unordered_map 容器。比如:
- std::unordered_map<std::string, std::string> umap;
由此,就创建好了一个可存储 <string,string> 类型键值对的 unordered_map 容器。
2) 当然,在创建 unordered_map 容器的同时,可以完成初始化操作。比如:
- std::unordered_map<std::string, std::string> umap{
- {"Python教程","http://c.biancheng.net/python/"},
- {"Java教程","http://c.biancheng.net/java/"},
- {"Linux教程","http://c.biancheng.net/linux/"} };
begin()
end()
empty()
size()
at(key):返回容器中存储的键 key 对应的值,如果 key 不存在,则会抛出 out_of_range 异常。
find(key):查找以 key 为键的键值对,如果找到,则返回一个指向该键值对的正向迭代器;反之,则返回一个指向容器中最后一个键值对之后位置的迭代器(如果 end() 方法返回的迭代器)。
count(key):在容器中查找以 key 键的键值对的个数。
insert()
erase()
clear()
swap():交换 2 个 unordered_map 容器存储的键值对,前提是必须保证这 2 个容器的类型完全相等。
reserve():将存储桶的数量(也就是 bucket_count() 方法的返回值)设置为至少容纳count个元(不超过最大负载因子)所需的数量,并重新整理容器。
四、补充
首先需要包含头文件
#include <unordered_map> using namespace std;
unordered_map在< >中需要指明两个变量类型,第一个是key的类型,第二个是key对应的value的类型
可以单次定义:
unordered_map<char, int> map; map['A'] = 1;
也可以多个键值对一起定义:
unordered_map<char, int> map={ {'A',1}, {'B',2}, {'C',3} };
哈希表类型也可以更改,比如 key 和 value 都是 char 类型:
unordered_map<char, char> map={ {')','('}, {']','['}, {'}','{'} };
在调用哈希表时,注意使用方括号,而不是圆括号
cout << map['A'];
如果需要判断某 key 是否存在于哈希表中,可以使用 count() 函数。
count()返回要查找的key在map的所有key种的出现次数。因为此容器不允许重复,故count()只可能返回 1 或 0,即可判断此key是否存在。
if (map.count('A')) { cout << "I'm here"; } else { cout << "I'm not here"; }
另外,还可以使用 find() 函数实现上述功能:
if (map.find('A')==map.end()) { cout << "I'm not here"; } else { cout << "I'm here"; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)