620 字
3 分钟
unordered_map in C++
2025-07-07

C++ STL 标准库中提供的一种无序关联式容器。

unordered_map,直译过来是“无序的map容器”,因此可以看出其与map容器的区别便是unordered_map是无序的,map中则是有序的数据。具体来说,unordered_map和map一样,用键值对(pair类型)来储存数据,存储的各个键值对的键互不相同且不允许更改,由于unordered_map底层采用哈希表来存储,哈希表并不会对数据进行排序功能,因此容器内部不会进行排序。

NOTE

unordered_map在<unordered_map>头文件中,并且处于std空间,因此需要引用头文件并注明命名空间。

#include <unordered_map>
using namespace std;

unordered_map模版定义如下:

template < class Key, //键值对中键的类型
class T, //键值对中值的类型
class Hash = hash<Key>, //容器内部存储键值对所用的哈希函数
class Pred = equal_to<Key>, //判断各个键值对键相同的规则
class Alloc = allocator< pair<const Key,T> > // 指定分配器对象的类型
> class unordered_map;

前两个参数是必须要传递的,除特殊情况外,最多需要前四个参数,每个参数的含义功能如下:

参数含义
<key,T>前 2 个参数分别用于确定键值对中键和值的类型,也就是存储键值对的类型。
Hash = hash用于指明容器在存储各个键值对时要使用的哈希函数,默认使用 STL 标准库提供的 hash 哈希函数。注意,默认哈希函数只适用于基本数据类型(包括 string 类型),而不适用于自定义的结构体或者类。
Pred = equal_to要知道,unordered_map 容器中存储的各个键值对的键是不能相等的,而判断是否相等的规则,就由此参数指定。默认情况下,使用 STL 标准库中提供的 equal_to 规则,该规则仅支持可直接用 == 运算符做比较的数据类型。

创建C++ unordered_map容器的办法#

std::unordered_map<std::string, std::string> umap;
std::unordered_map<std::string, std::string> umap{
{"Python","https://www.python.org/"},
{"Java","https://www.java.com/zh-CN/"}};
//在已有umap的基础上复制出umap2
std::unordered_map<std::string, std::string> umap2(umap);
//C++11提供的返回临时 unordered_map 容器的函数
std::unordered_map <std::string, std::string > retUmap(){
std::unordered_map<std::string, std::string>tempUmap{
{"Python","https://www.python.org/"},
{"Java","https://www.java.com/zh-CN/"}};
return tempUmap;
}
//调用移动构造函数,创建 umap2 容器
std::unordered_map<std::string, std::string> umap2(retUmap());
//使用迭代器进行创建umap2,其内部就包含 umap 容器中除第 1 个键值对外的所有其它键值对。
std::unordered_map<std::string, std::string> umap2(++umap.begin(),umap.end())
unordered_map in C++
https://hyy.info/posts/unordered_map-in-c/
作者
StarGazer
发布于
2025-07-07
许可协议
CC BY-NC-SA 4.0