STL 不同容器间的差异
| Vector | deque | list | set | multiset | map | multimap |
---|
存储结构 | 单端数组 | 双端数组 | 双向链表 | 二叉树 | 二叉树 | 二叉树 | 二叉树 |
是否为键值对 | 否 | 否 | 否 | 否 | 否 | 是 | 是 |
元素可重复 | 是 | 是 | 是 | 否 | 是 | key值否 | 是 |
可随机存取 | 是 | 是 | 否 | 否 | 否 | 对key而言:不是 | 否 |
元素搜寻速度 | 慢 | 慢 | 非常慢 | 快 | k快 | 对key而言:快 | 对key而言:快 |
元素安插移除 | 尾端 | 头尾两端 | 任何位置 | 不支持 | 不支持 | 不支持 | 不支持 |
Vector使用场景
- 需要开辟一段连续的内存空间,并支持随机访问,所以它的查找效率不高,在缺省情况下使用。
Deque使用场景
- 与Vector相似,它可以头部尾部插入和移除元素,并且容量比Vector大得多。
List使用场景
- List支持随机插入,删除,移动元素,不支持随机村粗,且搜索速度慢,用在经常变更数据,不经常查找的情况下使用。
set和multiset使用场景
- 经常以某个key值搜索元素,和大数据量的情况下使用更好。
map和multimap使用场景
- 使用key值搜索大数据量下使用,效率比Vector好很多,Vector最坏的情况是遍历完所有key.
C++11新容器
| unordered_map | unordered_set | unordered_multimap | unordered_multiset | forward_list | array | pair | tuple |
---|
存储结构 | 哈希表 | 哈希表 | 哈希表 | 哈希表 | 单向链表 | 固定大小数组 | 将2个数据组合成一组数据 | 将任意种类型建立闭包 |
是否为键值对 | 是 | 是 | 是 | 是 | 否 | 否 | 否 | 否 |
元素可重复 | 不允许key重复 | 不允许key重复 | 可以 | 可以 | 可以 | 可以 | 可以 | 可以 |
unordered_map,unordered_set,unordered_multimap,unordered_miltiset与map,set,multimap,multiset最大的区别就是,存储结构为Hash,无序。
array
- arrap就是数组,会在编译时创建一个固定大小的数组array不能被隐式转换成指针,定义时需要指定类型和大小。支持快速随机访问。不能添加或删除元素,而且它保存在栈内存中。C++11后尽量使用array代替数组。
tuple