C++ unordered_map

5 篇文章 0 订阅

C++ unordered_map

1、unordered_map简介

unordered_map是C++11正式加入的对hash_map的官方实现。元素在内部不以任何特定顺序排序,而是放进桶中。元素放进哪个桶完全依赖于其键的hash。这允许对单独元素的快速访问,因为一旦计算hash,则它准确指代元素所放进的桶。但unordered_map搜索、插入和元素移除拥有平均常数时间复杂度。

2、头文件

#include <unordered_map>

3、成员函数

成员函数函数功能
insert在unordered_map中插入元素。
emplace构造新元素并将其插入unordered_map。
emplace_hint通过提示构造新元素并将其插入unordered_map。
find搜索具有给定键的元素。
begin返回指向unordered_map中第一个元素的迭代器。
end返回指向末尾的迭代器。
cbegin返回指向unordered_map中第一个元素的const迭代器。
cend返回指向末尾的常量迭代器。
clear删除unordered_map的所有元素。
size返回unordered_map中的元素数。
max_size返回unordered_map的最大容量。
count返回的是被查找元素的个数。如果有,返回1;否则,返回0。注意,map中不存在相同元素,所以返回值只能是1或0。
empty如果unordered_map为空,则返回true。
erase从unordered_map上删除元素。
upper_bound返回第一个大于值val的位置
lower_bound返回第一个大于等于值val的位置
swap交换unordered_map内容。
at用给定的键检索元素。
bucket_count返回槽(Bucket)数
max_bucket_count返回最大槽数
bucket_size返回槽大小
bucket返回元素所在槽的序号
load_factor返回载入因子,即一个元素槽(Bucket)的最大元素数
max_load_factor返回或设置最大载入因子
rehash设置槽数
reserve请求改变容器容量
3.1 插入操作
unordered_map<int, string> m;
// 如果已经存在键值 1,则会作赋值修改操作,如果没有则插入
m[1] = "zhangsan";

// 插入单个键值对,并返回插入位置和成功标志,插入位置已经存在值时,插入失败
pair<iterator,bool> insert (const value_type& val);

//在指定位置插入,在不同位置插入效率是不一样的,因为涉及到重排
iterator insert (const_iterator position, const value_type& val);

// 插入多个
void insert (InputIterator first, InputIterator last);

//c++11开始支持,使用列表插入多个   
void insert (initializer_list<value_type> il);
3.2 取值操作

unordered_map中元素取值主要有at和[ ]两种操作。

unordered_map<int, string> m;

cout << m[1] << endl;
cout << m.at(1) << endl;
3.3 容量查询
// 查询unordered_map是否为空
bool empty();

// 查询unordered_map中键值对的数量
size_t size();

// 查询unordered_map所能包含的最大键值对数量,和系统和应用库有关。
// 此外,这并不意味着用户一定可以存这么多,很可能还没达到就已经开辟内存失败了
size_t max_size();

// 查询关键字为key的元素的个数,在unordered_map里结果非0即1
size_t count(const Key& key) const; //
3.4 删除操作
// 删除迭代器指向位置的键值对,并返回一个指向下一元素的迭代器
iterator erase( iterator pos )

// 删除一定范围内的元素,并返回一个指向下一元素的迭代器
iterator erase( const_iterator first, const_iterator last );

// 根据Key来进行删除, 返回删除的元素数量,在unordered_map里结果非0即1
size_t erase( const key_type& key );

// unordered_map,清空后的size为0
void clear();
3.5 查找操作
// 关键字查询,找到则返回指向该关键字的迭代器,否则返回指向end的迭代器
// 根据unordered_map的类型,返回的迭代器为 iterator 或者 const_iterator
iterator find (const key_type& k);
const_iterator find (const key_type& k) const;
  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值