STL 的一些数据结构比较
来源:互联网 发布:小偶的软件 编辑:程序博客网 时间:2024/06/05 01:10
从功能的角度,基本上vector都支持,这里重点是支持的高效的操作。每种数据结构支持不同的高效操作,所谓高效操作就是O(1) 或者O(lgn)的复杂度。
stack 高效的尾部增删
vector 高效的尾部增删,但是开放了其他的操作,这些操作是低效的
queue 高效的尾部增,头部删
priority_queue: 高效的尾部增,头部删,但头部是最小值而不是最早值。一般队列从逻辑上可以看作是key为进队时间的优先队列。
deque 高效的头尾都可以增删
list 高效的头尾都可以增删,基于双向链表。
基于连续存储(数组)的数据结构,不支持任意元素的高效查找和删除,只能是特定元素(端元素),高效查找理论上是可能的,通过排序,但是会使其他操作变的低效。可以配以map支持高效查找,但是删除依然是问题。list + map 可以扩展到支持任意元素查找和删除。 注意有2种序,一种是元素进入的先后顺序,一种是元素值大小的顺序。要查找必须要按后者组织数据。
对于连续存储,deque已经是极致了。 除了vector都是窄api 的,只支持特定的操作,但是是高效的,专器专用。vector是一个宽API的设计。
deque和queue可以用环形数组实现,加上 resizing 机制。
set, multiset, map, multimap 都是平衡二叉平衡树。multi版本的支持重复key,实现的方式可以是挂一个链表,只是头参与到树里,也可以是按有些排序树的定义,大于等于放到右子树。
注意multiset的删除,multiset.erase(key) 会删除所有这个key的结点, multiset.erase(iterator)是删除一个。所以要只删除一个:multiset.erase(multiset.find(key));
平衡树是支持很宽操作但同时又高效的操作,可以高效增删改查任意元素。唯一的不足是丢失了元素进入的顺序,但是java的LinkedHashMap又弥补了这一点。平衡树强大因为它有序,所以支持快速查找定位,同时它不连续,删除时候不会对全局有影响。
set基本上可以代替堆,priority_queue,后者的好处是窄API,在不需要访问、删除任意元素时候用。
- STL 的一些数据结构比较
- c++ stl容器的一些比较
- 一些数据结构的内存和时间比较
- [C++]高效定义STL比较函数的一些建议
- STL -- 关于一些字符串处理用到的函数和数据结构
- STL里的数据结构
- stl 容器的数据结构
- STL的数据结构
- STL的一些总结
- stl的一些事
- STL的一些东西
- STL源码:map、set与其他顺序容器的一些比较
- 各种数据结构的比较
- STL容器的效率比较
- STL算法 ------- 区间的比较
- STL容器的效率比较
- STL中map的数据结构
- STL中map的数据结构
- Django+uWsgi+nginx部署
- Median of Two Sorted Arrays
- spring中@Resource和@Autowired的区别是什么?
- 模拟器黑屏解决方法
- java之 ------ 图形界面(三)
- STL 的一些数据结构比较
- C++实现页码数字统计
- 需要学习8个重要的cmd指令
- CSS vertical-align的深入理解(二)之text-top篇
- c++ primer 学习笔记(2)迭代器
- Eclipse中自动提示的参数变成arg0,arg1的解决办法
- 关于STM32的IAP在线升级的整理
- Hadoop的简单控制台log分析
- Nim教程翻译(三)