1.vector
底层是数组,连续内存空间,当内存不够时重新申请2倍的空间,原来数据复制过去,原空间清空
2.map multimap
STL的关联容器,map不允许key重复,multimap允许key重复。(key- value)
内部元素有序,红黑树可以自动排序(以key为序排列)
底层原理是使用了 红黑树,O(logN)的查找 插入 删除的速度。
3.unordered_map 和 unordered_multimap
和2中两个对外接口基本一致,底层原理不同,key无序,
底层实现为 hash table,查找效率O(1), 占用内存高。
4.set,multiset
关键字即值,只保存关键字的容器。
set,multiset底层是红黑树,有序存储元素,和map,multimap类似,O(logN),
5.unordered_set,unordered_multiset
底层为hash table
6.priority_queue
优先队列相当于一个有权值的单向队列queue,所有元素按照优先级排列。
priority_queue 根据 堆的规则处理元素间位置,取出最大最小值点时间为O(1),插入删除时间为O(logN)。
底层实现是 heap(堆),最大堆,vector的完全二叉树。
以任何次序将任何元素推入到容器中,取出时一定是按照优先权值最高(或最低)来取的。
- list 双向链表,增删频繁时适合用。 查询频繁适合用vector。
8.堆
堆不能算作一种容器(和map vector不同),只能算是组织容器元素的一种特别方式。
大顶堆/小顶堆:每一个节点满足 大于/小于其左右子节点(并非这个堆按照从大到小的顺序排列)
堆排序:堆排序之后的堆,整体才是有序的。
堆:一般用数组 vector来实现的一个具有特殊结构的完全二叉树。(C++ heap用vector实现)
STL封装了在vector进行堆操作的函数,
make_heap,建立堆(大顶堆 less或者 小顶堆greater)
push_heap,在堆中添加元素
pop_heap,在堆中删除元素
sort_heap,堆排序。



