STL容器系列文章:unordered_map容器

1. 头文件

#include <unordered_map>

2. 定义

  • 关联容器。无序map容器,无序是相对map容器来说的,unordered_map不会自动按照键排序
  • 存储键值对key-value,通过key索引value,不存在两个元素的键key一样,这是相对于multimap来说的
  • 和unordered_set一样,底层采用防冗余哈希表hashTable实现,检索时间复杂度O(1),最差O(N),内存消耗大
  • 容器模板类
template <class Key,									 // key类型,显示指定
		  class Type,									 // value类型,显示指定
		  class Hash = hash<Key>,						 // 哈希函数
		  class Pred = equal_to<Key>,					 // 判断key相同的规则
		  class Alloc = allocator<pair<const Key, Type>> // 指定分配器对象的类型
		  > class unordered_map;

/* 哈希函数:基础类型有默认hash_func,自定义数据类型需重新定义hash_func */		  

3. 对象创建

方法说明
unordered_map<string, string> uMap;创建空容器
unordered_map<string, string> uMap{{“cpp”, “cpp.learning.org”}};创建时初始化
unordered_map<string, string> map2(map1);通过其他容器初始化
unordered_map<string, string> map2(++map1.begin(), map1.end());拷贝部分键值对

4. 常用方法

  • 容量
方法说明
myMap.size()容器中元素个数
myMap.max_size()容器所能容纳的最大元素个数,不同系统不一样
myMap.empty()容器是否为空
  • 添加:emplace
方法说明
pair< unordered_map<int, string>::iterator, bool> ret = myMap.emplace(key, value);C11新增,效率比insert高;返回值是pair数据类型,iterator表示插入元素的迭代器,如果key相同指向相同key对应的迭代器,bool表示插入成功与否
iterator = myMap.emplace_hint(ite, key, value);C11,ite为建议插入元素的位置,不一定被容器采纳,返回值是新插入元素的迭代器,或为相同key的迭代器
  • 添加:insert
方法说明
pair<iterator, bool> ret = myMap.insert(pair<keyType, valueType>(key, value));方式1
pair<iterator, bool> ret = myMap.insert(make_pair(key, value));方式2
iterator ret = myMap.insert(iterator, pair<keyType, valueType>);方式3
void myMap.insert(anotherMap.first, anotherMap.last);方式4,[first, last)
void myMap.insert({{“Alice”, 21}, {“Bob”, 22}, {“Clark”, 23}});方式5,同时添加多个键值对,注意{{}, {}, {}}
  • 删除
方法说明
size_type count = myMap.erase(const keyType& key);删除键为key的键值对,返回删除键值对的数量
iterator ite = myMap.erase(iterator);删除迭代器指向的键值对,返回后一个位置的迭代器
iterator ite = myMap.erase(first, last);删除[first, last)迭代器返回内的元素,返回最后一个被删除键值对后一个位置的迭代器
void myMap.clear();清空容器
  • 交换
方法说明
map1.swap(map2);方式1
void swap(map1, map2);方式2
  • 访问
方法说明
操作符访问:[]容器重载了operator [],不存在会添加key的一个元素
valueType = myMap.at(key);at方式访问,不存在会抛出out_of_range异常
  • 查找
方法说明
myMap.find(key)返回迭代器,无效返回end()
myMap.count(key) == 0键值对个数,0或1,因为unordered_map不允许重复key存在
  • 迭代器
方法说明
begin()/end()正向迭代器
cbegin()/cend()const正向迭代器
  • 桶操作
方法说明
bucket_count()桶的数量
max_bucket_size()当前系统底层最多使用多少桶
bucket_size(n)返回第n个桶中键值对数量
bucket(key)返回以key为键的键值对所在桶的编号
rehash(n)将当前容器底层使用桶的个数设置为n

参考文章
unordered_map容器的定义和方法
推荐,unordered_map容器方法实例
unordered_map的insert方法

created by shuaixio, 2021.06.22

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值