| STL 容器 | 底层数据结构 | 查找 | 插入 | 删除 |
|---|---|---|---|---|
vector |
动态数组 | O(1) 随机访问 | 尾部 O(1)(均摊) | 中间 O(n) |
array |
静态数组 | O(1) | 不支持扩容 | 不支持 |
deque |
分段连续数组(Map + Block) | O(1) | 两端 O(1) | 两端 O(1) |
list |
双向链表 | O(n) | O(1) | O(1) |
forward_list |
单向链表 | O(n) | O(1) | O(1) |
set |
红黑树 | O(log n) | O(log n) | O(log n) |
multiset |
红黑树 | O(log n) | O(log n) | O(log n) |
map |
红黑树 | O(log n) | O(log n) | O(log n) |
multimap |
红黑树 | O(log n) | O(log n) | O(log n) |
unordered_set |
哈希表 | 平均 O(1) | 平均 O(1) | 平均 O(1) |
unordered_map |
哈希表 | 平均 O(1) | 平均 O(1) | 平均 O(1) |
unordered_multiset |
哈希表 | 平均 O(1) | 平均 O(1) | 平均 O(1) |
unordered_multimap |
哈希表 | 平均 O(1) | 平均 O(1) | 平均 O(1) |
stack |
默认 deque(也可 vector、list) |
--- | 栈顶 O(1) | 栈顶 O(1) |
queue |
默认 deque |
--- | 尾部 O(1) | 头部 O(1) |
priority_queue |
二叉堆(Heap) | 最大值 O(1) | O(log n) | O(log n) |
| STL 算法 | 底层算法 | 时间复杂度 |
|---|---|---|
sort() |
Introsort(快速排序 + 堆排序 + 插入排序) | O(n log n) |
stable_sort() |
归并排序 | O(n log n) |
partial_sort() |
堆排序 | O(n log k) |
nth_element() |
Introselect(快速选择) | 平均 O(n) |
make_heap() |
建堆 | O(n) |
push_heap() |
堆上滤 | O(log n) |
pop_heap() |
堆下滤 | O(log n) |
binary_search() |
二分查找 | O(log n) |
lower_bound() |
二分查找 | O(log n) |
upper_bound() |
二分查找 | O(log n) |
equal_range() |
二分查找 | O(log n) |
find() |
顺序查找 | O(n) |
find_if() |
顺序查找 | O(n) |
count() |
顺序遍历 | O(n) |
for_each() |
顺序遍历 | O(n) |
transform() |
顺序遍历 | O(n) |
copy() |
顺序复制 | O(n) |
copy_if() |
顺序复制 | O(n) |
remove() |
双指针(快慢指针) | O(n) |
unique() |
双指针 | O(n) |
reverse() |
双指针交换 | O(n) |
rotate() |
三次翻转/循环移动 | O(n) |
merge() |
归并 | O(n) |
set_union() |
双路归并 | O(n) |
set_intersection() |
双路归并 | O(n) |
set_difference() |
双路归并 | O(n) |
min_element() |
顺序扫描 | O(n) |
max_element() |
顺序扫描 | O(n) |
accumulate() |
累加 | O(n) |