[C++] 有序容器与无序容器

有序容器与无序容器

有序容器 map/multimapset/multiset 内部采用红黑树实现,插入元素时自动排序,可采用中序遍历从小到大遍历元素。

C++11 增加了无序容器 unordered_map/unordered_multimapunordered_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++ 参考手册

上一篇:STL_unordered_set容器


下一篇:嵌套容器 stl