C++ STL 常用容器笔记:queue 与 set
一、队列(queue)
1. 核心特点
- 遵循 先进先出(FIFO, First In First Out) 原则
- 仅支持在队尾插入元素,在队首删除元素
2. 常用操作(结合代码示例)
queue<int> q;
| 操作代码 |
功能说明 |
q.push(10) |
从队尾插入元素 10 |
q.front() |
获取队首元素(仅读取,不删除该元素) |
q.pop() |
删除队首元素(无返回值,需配合 front() 获取被删元素) |
q.size() |
返回队列中当前的元素个数 |
代码执行流程示例:
q.push(10); // 队列:[10]
q.push(20); // 队列:[10, 20]
q.push(30); // 队列:[10, 20, 30]
q.front(); // 返回 10(队列仍为 [10, 20, 30])
q.pop(); // 队列变为:[20, 30]
q.size(); // 返回 2
二、集合(set)
1. 核心特点
- 元素唯一(自动去重,重复插入无效)
- 元素有序(默认按升序排列,底层通常为红黑树)
- 插入、删除、查找操作的时间复杂度均为 O(log n)
2. 常用操作(结合代码示例)
set<int> s;
| 操作代码 |
功能说明 |
s.insert(10) |
向集合插入元素 10(若已存在则忽略该次插入) |
s.size() |
返回集合中当前的元素个数 |
s.count(40) |
判断元素 40 是否存在(返回 1 表示存在,0 表示不存在) |
s.erase(10) |
从集合中删除元素 10(若不存在则无操作) |
for(auto x : s) |
范围遍历集合(按升序依次访问每个元素) |
代码执行流程示例:
s.insert(10); // 集合:{10}
s.insert(10); // 重复插入,集合仍为:{10}
s.insert(20); // 集合:{10, 20}
s.insert(30); // 集合:{10, 20, 30}
s.size(); // 返回 3(自动去重)
s.count(40); // 返回 0(40 不存在)
s.erase(10); // 集合变为:{20, 30}
// 遍历输出:20 30
for(auto x : s){
cout << x << " ";
}
三、适用场景总结
queue:适用于“按顺序处理任务”的场景(如消息队列、广度优先搜索 BFS)。
set:适用于“元素去重 + 快速查找/排序”的场景(如数据统计、去重存储)。