这篇文章的内容是关联容器。这章的主要内容还是在告诉我们怎么使用关联容器。

顺序容器靠位置索引,关联容器靠关键字索引。


总结一下,主要有三种分类方式:map类型和set类型、关键字是否可重复出现、是否有序存储。
一、使用关联容器

1.map的简单使用


2.set的简单使用


二、关联容器概述

上面的内容先定性介绍了一下关联容器跟顺序容器的使用区别。
1.定义关联容器
1)初始化map或set


2)初始化multimap或multiset

2.关键字类型的要求

1)有序容器的关键字类型

一个新的词:严格弱序。不过讲了那么多直接看最后的note就好了。
2)使用关键字类型的比较函数



即如果要使用自己的类对象往set里面丢,这个时候我们需要定义比较函数,否则无法调用排序功能。
3.pair类型



没啥好讲的,知道了map的操作,理解pair小菜一碟。
1)创建pair对象的函数


即使用make_pair函数创建。
三、关联容器操作


这节的开胃小菜,介绍关联容器额外的类型别名比较值得注意的是map的value_type是pair类型的。
1.关联容器的迭代器

1)set的迭代器是const的

毕竟set的value_type是指向关键字的。
2)遍历关联容器


举个例子:
set<int> s{ 3,1,6,8 };
for (auto num : s)cout << num << endl;//将输出1 3 6 8
//num是value_type类型的
关联容器也是可以使用范围for语句遍历的。
3)关联容器和算法

2.添加元素


1)向map添加元素


在这主要是介绍用insert来完成插入操作。后面还会介绍其他的插入方式。
2)检查insert的返回值


要知道insert的返回值代表的什么意思。
3)展开递增语句
接下来是在接上面的内容,进一步解释insert的返回值的意义和使用
4)向multiset或multimap添加元素


multiset或multimap添加元素时不会去重。
3.删除元素


4.map的下标操作
平时访问元素添加元素用的比较多的便是下标操作。

想要不自动创建的话要用at
1)使用下标操作的返回值
![]()

5.访问元素


1)对map使用find代替下标操作

2)在multimap或multiset中查找元素


接下来介绍的两种方法主要就为了解决multimap或multiset的访问问题。
3)lower_bound与upper_bound
lower_bound与upper_bound是一种不同的,面向迭代器的解决方法

注: lower_bound与upper_bound对解决multimap或multiset的访问问题效果极佳


4)equal_range函数
对解决multimap或multiset的访问问题效果也是极佳
![]()

6.一个单词转换的map
接下来的内容主要是通过举一个例子对本节内容进行一个总结。这部分没啥难的地方,仔细阅读就能理解了。
1)题目与任务


2)单词转换程序




3)建立转换映射

4)生成转换文本

![]()
四、无序容器

1.使用无序容器


2.管理桶

关于哈希桶可参考:
【数据结构】哈希桶_Cheng_913的博客-CSDN博客_数据结构 桶
哈希桶的实现_xy的博客-CSDN博客_哈希桶

3.无序容器对关键字的要求


主要在讲当无序容器的关键字是自定义类型时,该怎么处理。










