有序容器与无序容器
有序容器 map/multimap 和 set/multiset 内部采用红黑树实现,插入元素时自动排序,可采用中序遍历从小到大遍历元素。
C++11 增加了无序容器 unordered_map/unordered_multimap 和 unordered_set/unordered_multiset。内部采用散列表存储数据,通过Hash函数实现元素的快速操作,同时元素的存储是无序的。
对比map和unordered_map
1 包含的头文件不同
map:
#include < map >
unordered_map:
#include < unordered_map >
2 map的优缺点
优点:
- 有序性,适用于对数据顺序有要求的场合;
- 整体效率很高,红黑树基本可以在O(logn)的时间复杂度完成绝大多数操作;
缺点:
- 红黑树的结构导致其空间占用率必然会高一些;
unordered_map 的优缺点
优点:
- 利用hash表实现O(1)时间复杂度的查询操作,效率非常高;
缺点:
- hash表的建立相对比较耗时(需要解决hash冲突),因此插入的效率稍显逊色;
STL参考
关于STL容器的更多内容可以参考 C++ 参考手册