第11章:关联容器

11.1 使用关联容器

使用map
一个经典的使用关联数组的单词计数程序:
在这里插入图片描述
使用set
在这里插入图片描述

11.2 关联容器概述

关联容器不支持顺序容器的位置相关的操作,例如push_front或push_back,原因是关联容器中的元素是根据关键字存储的。

11.2.1 定义关联容器

定义一个map时,必须既指明关键字类型又指明值类型;而定义一个set时,只需要指明关键字类型,因为set中没有值。
在这里插入图片描述
初始化multimap或multiset
一个map或set中的关键字必须是唯一的,即,对于一个给定的关键字,智能有一个元素的关键字等于它。容器multimap和multiset没有此限制,它们都允许多个元素具有相同的关键字。

11.2.2 关键字类型的要求

关联容器对其关键字类型有一些限制。对于无序容器中关键字的要求,后续介绍,对于有序容器-map,multimap,set以及multiset,关键字类型必须定义元素的比较方法。
有序容器的关键字类型
可以向一个算法提供我们自己定义的比较操作。所有操作必须在关键字类型上定义一个严格弱序。
使用关键字类型的比较函数
用来组织一个容器中元素的操作的类型也是该容器类型的一部分。为了指定使用自定义的操作,必须在定义关联容器类型时提供此操作的类型。如前所述,用尖括号指出要定义那种类型的容器,自定义的操作类型必须在尖括号中紧跟着元素类型给出。
为了使用自己定义的操作,在定义multiset时我们必须提供两个类型:关键字类型以及比较操作类型。
在这里插入图片描述
在这里插入图片描述

11.2.3 pair类型

一个pair保存两个数据成员。类似容器,pair是一个用来生成特定类型的模板,当创建一个pair时,我们必须提供两个类型名,pair的数据成员将具有对应的类型,两个类型不要求一样。
在这里插入图片描述
pair的默认构造函数对数据成员进行值初始化。
与其它标准库不同,pair的数据成员是public的。两个成员分别命名为first和second。
在这里插入图片描述
在这里插入图片描述创建pair对象的函数

在这里插入图片描述
在这里插入图片描述

11.3 关联容器操作

在这里插入图片描述
在这里插入图片描述

11.3.1 关联容器迭代器

当解引用一个关联容器迭代器时,我们会得到一个类型为容器的value_type的值的引用,对map而言,value_type是一个pair类型,其first成员保存const的关键字,second成员保存值。
在这里插入图片描述
在这里插入图片描述

set的迭代器是const的
在这里插入图片描述
遍历关联容器
map和set都支持begin和end操作。
关联容器和算法
我们通常不对关联容器使用泛型算法。关键字是const这一特性意味着不能将关联容器传递给修改或重排容器元素的算法,因为这类算法需要向元素写入值。
关联容器可用于只读取元素的算法。

11.3.2 添加元素

关联容器的insert成员向容器中添加一个元素或一个元素范围。由于map和set包含不重复的关键字,因此插入一个已经存在的元素对容器没有任何影响。
向map添加元素
在这里插入图片描述
在这里插入图片描述

检测insert的返回值
insert的返回值依赖于容器类型和参数。对于不包含重复关键字的容器,添加单一元素的insert和emplace版本返回一个pair,告诉我们插入操作是否成功。pair的first成员是一个迭代器,指向具有给定关键字的元素;second成员是一个bool值,之处元素是插入成功还是已经存在于容器中。
在这里插入图片描述
展开递增语句
在这里插入图片描述
向multiset或multimap添加元素
在multimap或multiset上调用insert总会插入一个元素。

11.3.3 删除元素

关联容器定义了3个版本的erase,与顺序容器一样,我们可以通过传递给erase一个迭代器或迭代器对来删除一个元素或者一个元素范围。
在这里插入图片描述

11.3.4 map的下标操作

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
使用下标操作的返回值
在这里插入图片描述

11.3.5 访问元素

关联容器提供多种查找一个指定元素的方法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
对map使用find代替下标操作
在这里插入图片描述
在multimap或multiset中查找元素
在这里插入图片描述
一种不同的面向迭代器的解决方法
在这里插入图片描述
equal_range函数
解决此问题的第三个办法
在这里插入图片描述

11.3.6 一个单词转换的map

无序容器

新标准定义了4个无序关联容器,这些容器不是使用比较运算符来组织元素,而是使用一个哈希函数和关键字类型的==运算符。
在这里插入图片描述
使用无序容器
除了哈希管理操作之外,有序容器的操作,无序容器也能用。通常可以用一个无序容器替换对应的有序容器。
管理桶
无序容器在存储上组织为一组桶,每个桶保存零个或多个元素。
在这里插入图片描述
无序容器对关键字类型的要求
在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值