📘 一、序列式容器 vs 关联式容器
1.1 什么是序列式容器?
我们之前学过的 string、vector、list、deque、array、forward_list 都属于序列式容器。
它们的特点是:元素按照插入的物理顺序存储,逻辑结构是线性的,元素之间没有特别紧密的关联关系。
就像一列火车,车厢(元素)按顺序排列,你可以通过位置(下标或迭代器)直接访问。
1.2 什么是关联式容器?
关联式容器(如 map、set、multimap、multiset)则是按关键字(key)来保存和访问数据的,逻辑结构通常是非线性的(如树或哈希表)。
set:只存储 keymap:存储 key-value 键值对- 它们底层通常使用红黑树(平衡二叉搜索树)实现,因此插入、删除、查找的时间复杂度都是 O(logN),并且遍历时元素是有序的(按 key 排序)。
就像字典,我们通过'单词'(key)查找'释义'(value),而不是通过第几页。
🧩 二、set 系列详解
2.1 set 的基本特性
- 元素唯一(自动去重)
- 默认按 key 升序排序(可通过仿函数改为降序)
- 不允许修改 key(会破坏红黑树结构)
- 底层为红黑树,支持双向迭代器
#include <set>
#include <iostream>
using namespace std;
int main() {
set<int> s = {5, 2, 8, 2, 9, 1};
for (int num : s) {
cout << num << " "; // 输出:1 2 5 8 9(自动去重 + 排序)
}
return 0;
}


