1. 关联式容器
vector、list、deque 等属于序列式容器,底层是线性结构,存储元素本身。而关联式容器同样用于存储数据,但内部维护的是 <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 Pair)表示具有一一对应关系的结构,一般包含 key 和 value 两个成员变量。key 代表键值,value 表示与 key 对应的信息。
4. Set 和 Multiset
4.1 Set 的使用
set 是按照特定次序存储元素的容器。在 set 中,元素的 value 也标识它(value 就是 key),且每个 value 必须是唯一的。set 中的元素不能在容器中修改(元素总是 const),但可以从容器中插入或删除。内部通过比较对象进行严格弱排序。
4.1.1 Set 的模板参数
- T:set 中存放元素的类型,实际底层存储 <value, value> 的键值对。
- Compare:set 中元素默认按照小于来比较。
- Alloc:set 元素空间的管理方式,使用 STL 提供的空间配置器。
4.1.2 Set 的构造
#include <iostream>
#include <set>
#include <vector>
using namespace std;
void TestConstructor() {
// 构造空的 set
set<int> s1;
vector<int> v1 = { 1,2,3,,,,,, };
;
;
( & element : s2) cout << element << ;
cout << endl;
(& element : s3) cout << element << ;
cout << endl;
}


