C++ 的标准模板库(STL)提供了丰富的容器、算法和工具,
以下是除了 vector
、unique_ptr
、unordered_set
、set
之外的其他常用 STL 组件:
一、容器类
1. 序列容器
-
std::list
:双向链表- 特点:支持 O(1) 插入/删除,但随机访问效率低。
- 适用场景:频繁插入删除,如实现队列、栈。
std::list<int> lst = { 1, 2, 3}; lst.push_back(4); // 尾部插入 lst.insert(++lst.begin(), 5); // 在第二个位置插入5
-
std::deque
:双端队列- 特点:支持 O(1) 头部/尾部插入删除,随机访问效率高。
- 适用场景:需要双向插入的场景(如 BFS 队列)。
std::deque<int> dq = { 1, 2}; dq.push_front(0); // 头部插入 dq.push_back(3); // 尾部插入
2. 关联容器
-
std::map
:键值对映射(红黑树实现)- 特点:键自动排序,查找、插入、删除 O(log n)。
- 适用场景:需要有序键值对的场景。
std::map<std::string, int> ages; ages["Alice"] = 25; ages["Bob"] = 20; std::cout << ages["Alice"]; // 输出:25
-
std::unordered_map
:哈希表实现的键值对- 特点:无序,平均查找、插入、删除 O(1)。
- 适用场景:快速查找键值对(如缓存)。
std::unordered_map<std::string, int> ages; ages["Charlie"] = 30;
-
std::multiset
:允许重复元素的有序集合std::multiset<int> ms = { 1, 2, 2, 3}; std::cout << ms.count(2); // 输出:2
-
std::multimap
:允许重复键的有序映射std::multimap<int, std::string> mm; mm.insert({ 1, "a"}); mm.insert({ 1, "b"}); // 键可以重复