620 字
3 分钟
unordered_map in C++
C++ STL 标准库中提供的一种无序关联式容器。
unordered_map,直译过来是“无序的map容器”,因此可以看出其与map容器的区别便是unordered_map是无序的,map中则是有序的数据。具体来说,unordered_map和map一样,用键值对(pair类型)来储存数据,存储的各个键值对的键互不相同且不允许更改,由于unordered_map底层采用哈希表来存储,哈希表并不会对数据进行排序功能,因此容器内部不会进行排序。
NOTEunordered_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 |
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的基础上复制出umap2std::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/