1. 关联式容器
- vector、list、deque、forward_list 等容器统称为序列式容器,因为底层是线性序列的数据结构,里面存储的是元素本身。
- 关联式容器也是用来存储数据的,与序列式容器不同的是,其里面存储的是**<key, value>结构的键值对**,在数据检索比序列式容器效率更高,例如 set、map、unordered_set、unordered_map 等。
- 注意:C++ STL 当中的 stack、queue 和 priority_queue 属于容器适配器,它们默认使用的基础容器分别是 deque、vector。
2. 树形结构与哈希结构
根据应用场景的不同,C++ 的 STL 容器总共实现了两种不同结构的关联式容器:树型结构和哈希结构。
| 关联式容器 | 容器结构 | 底层实现 |
|---|---|---|
| set、map、multiset、multimap | 树型结构 | 平衡搜索树 (红黑树) |
| unordered_set、unordered_map、unordered_multiset、unordered_multimap | 哈希结构 | 哈希表 |
其中,树型结构容器中的元素是一个有序的序列,而哈希结构容器中的元素是一个无序的序列。
3. 键值对
用来表示具有一一对应关系的一种结构,该结构中一般只包含两个成员变量 key 和 value,key 代表键值,value 表示与 key 对应的信息。
4. Set And MultiSet
4.1. set 的使用
- set 是按照一定次序存储元素的容器。
- 在 set 中,元素的 value 也标识它 (value 就是 key,类型为 T),并且每个 value 必须是唯一的。set 中的元素不能在容器中修改 (元素总是 const),但是可以从容器中插入或删除它们。
- 在内部,set 中的元素总是按照其内部比较对象 (类型比较) 所指示的特定严格弱排序准则进行排序。
- set 容器通过 key 访问单个 key 元素的速度通常比 unordered_set 容器慢,但它们允许根据顺序对子集进行直接迭代。
- set 在底层是用二叉搜索树 (红黑树) 实现的。
4.1.1. set 的模版参数列表
- T: set 中存放元素的类型,实际在底层存储<value,value>的键值对。
- Compare: set 中元素默认按照小于来比较。
- Alloc: set 元素空间的管理方式,使用 STL 提供的空间配置器进行管理。
4.1.1.1. set 的构造
#include <iostream>
using namespace std;
#include <set>
#include
{
set<> s1;
vector<> v1 = { ,,,,,,,, };
;
;
( & element : s2) cout << element << ;
cout << endl;
(& element : s3) cout << element << ;
cout << endl;
}
{
();
}


