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"; }
浙公网安备 33010602011771号