vector:动态数组,允许在尾部高效地添加和删除元素,支持随机访问。非常适合需要频繁访问元素和进行动态扩展的应用场景。
list:双向链表,支持快速插入和删除操作,但不支持随机访问。适合于需要频繁插入和删除元素的情况。
deque (double-ended queue):双端队列,可以在两端高效地添加和删除元素,并支持随机访问。适用于需要从两端快速操作数据的情形。
set 和 multiset:有序集合,用于存储唯一元素(set)或可能包含重复元素(multiset)。提供了高效的查找、插入和删除操作。
map 和 multimap:关联容器,用于存储键值对。map中每个键都是唯一的,而multimap允许键重复。它们都支持高效的键查找、插入和删除操作。
unordered_set 和 unordered_multiset:无序集合,基于哈希表实现,不保证元素顺序,提供常数时间复杂度的平均情况下的查找、插入和删除操作。
unordered_map 和 unordered_multimap:无序映射,也是基于哈希表实现的关联容器,不保证元素顺序,提供快速的键值对操作。
stack:后进先出(LIFO)的数据结构,仅允许在一端进行插入和删除操作。适合模拟栈式操作。
queue:先进先出(FIFO)的数据结构,仅允许在一端进行插入,在另一端进行删除。适用于需要按照到达顺序处理数据的情况。
priority_queue:优先级队列,根据元素的优先级来决定哪个元素会被最先取出。默认为最大堆结构。
vector
动态数组:当你需要一个大小可变的数组时使用,尤其是在需要频繁地从尾部添加或删除元素的情况下。
随机访问:当你需要经常通过索引访问元素时,vector提供了O(1)的时间复杂度。
list
频繁插入和删除:当你的应用需要频繁地在列表中间插入或删除元素时,list比vector更合适,因为list在这些操作上的时间复杂度为O(1),而vector则为O(n)。
双向遍历:list支持双向遍历,这在某些情况下非常有用。
deque
两端插入/删除:当你需要在序列的两端进行高效的插入和删除操作时使用deque。
随机访问:deque也支持随机访问,尽管它的随机访问性能不如vector。
set 和 multiset
唯一元素集合:set用于存储不允许有重复元素的集合。
排序集合:自动维护元素的排序状态。
频繁查找:适用于需要频繁查找元素的存在性,且不关心元素的顺序。
map 和 multimap
键值对集合:map用于存储键值对,其中每个键都是唯一的。
排序键值对:自动维护键的排序状态。
频繁查找:适用于需要根据键快速查找对应的值的情况。
unordered_set 和 unordered_multiset
无序集合:不需要考虑元素的顺序,但提供接近常数时间复杂度的查找、插入和删除操作。
唯一元素集合:unordered_set用于存储不允许有重复元素的集合。
unordered_map 和 unordered_multimap
无序映射:不需要考虑键值对的顺序,但提供接近常数时间复杂度的查找、插入和删除操作。
键值对集合:unordered_map用于存储键值对,其中每个键都是唯一的。
stack
后进先出(LIFO)操作:模拟栈的行为,如函数调用栈。
queue
先进先出(FIFO)操作:模拟队列的行为,如任务调度。
priority_queue
优先级处理:根据元素的优先级来决定哪个元素会被最先取出,常用于模拟优先级队列或最大堆/最小堆。