C++ STL unordered_map容器

一、特性:map 容器中存储的数据是有序的,而 unordered_map 容器中是无序的。 可以将 unordered_map 容器等价为无序的 map 容器。

 具体来讲,unordered_map 容器和 map 容器一样,以键值对(pair类型)的形式存储数据,存储的各个键值对的键互不相同且不允许被修改。但由于 unordered_map 容器底层采用的是哈希表存储结构,该结构本身不具有对数据的排序功能,所以此容器内部不会自行对存储的键值对进行排序。

二、创建:

 1) 通过调用 unordered_map 模板类的默认构造函数,可以创建空的 unordered_map 容器。比如:

  1. std::unordered_map<std::string, std::string> umap;

由此,就创建好了一个可存储 <string,string> 类型键值对的 unordered_map 容器。

2) 当然,在创建 unordered_map 容器的同时,可以完成初始化操作。比如:

  1. std::unordered_map<std::string, std::string> umap{
  2. {"Python教程","http://c.biancheng.net/python/"},
  3. {"Java教程","http://c.biancheng.net/java/"},
  4. {"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";
}

 

posted @   yhstsy  阅读(127)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示