《C++ Primer》 读书笔记——第十一章 关联容器

第十一章 关联容器

在这里插入图片描述
map和multimap定义在头文件map中;
set和multiset定义在头文件set中
无序容器则定义在头文件unordered_map和unordered_set中

11.1 使用关联容器

1、使用map的简单例子

在这里插入图片描述
for循环读取map得到的是pair类型

2、使用set的简单例子

在这里插入图片描述
map和set是模板,都需要指定元素类型

11.2 关联容器概述

1、关联容器对关键字类型的限制

在这里插入图片描述

2、有序容器的关键字类型

满足严格弱序
在这里插入图片描述

3、自定义操作的set

需要自己做一个函数,这个函数给出<的定义是什么
在这里插入图片描述
在这里插入图片描述

3、pair类型

pair定义在头文件utility中
在这里插入图片描述

11.3 关联容器操作

1、关联容器额外的类型别名

在这里插入图片描述

2、关联容器迭代器

当解引用关联容器迭代器时,得到一个类型为容器的value_type的值的引用。

map的迭代器用例:解引用得到的是pair
在这里插入图片描述
set的迭代器用例:注意set不能修改
在这里插入图片描述

3、添加元素

在这里插入图片描述
这里需要注意emplace的返回值,返回一个pair:
pair里的first是一个迭代器,指向刚插入的元素。
second是一个bool值,指定插入是否成功。

4、删除元素

在这里插入图片描述

5、map的下标操作

在这里插入图片描述
我们可以像访问数组那样,用关键字(string)当作index来访问map中的值

①、对于map的下标访问
如果原来存在有相应的元素,则更改原来的元素
如果原来没有相应的元素,则添加新元素。

②、map的下标操作返回一个mapped_type对象。并且是一个左值
比如对map<string, int>进行下标访问,需要使用对应的关键字string进行检索,得到的是与之对应的int左值。
在这里插入图片描述
③、不能对multimap或一个unordered_multimap进行下标操作
因为这些容器可能有多个值与一个关键字相关联。

6、访问元素

在这里插入图片描述

  • find如果没有找到,则会返回尾后迭代器。可以用作找没找到的判断条件
  • lower_bound和upper_bound两个函数组合起来,就可以获取与指定元素相等的迭代器范围
  • multimap和multiset中一个关键字对应多个元素,这些元素在容器中相邻存储。

“根据作者的名字,查找作者的著作”,以这种情况为例综合运用上述方法:
①、find和count的运用
在这里插入图片描述
②、lower_bound和upper_bound的运用
在这里插入图片描述
结合这两个函数得到与指定值相等的迭代器范围

③、equal_range函数
在这里插入图片描述
返回一个pair,存储的迭代器与方法②相同

11.4 无序容器

无序容器使用哈希函数来组织元素,使用无序容器通常更为简单,通常也会有更好的性能。

1、管理桶

使用桶的方法处理哈希函数中可能会出现的碰撞问题
在这里插入图片描述
在这里插入图片描述

2、无序容器对关键字类型的要求

可以直接定义关键字是内置类型的无序容器
在这里插入图片描述
不能直接定义关键字为自定义类型的无序容器
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值