C++ unordered_map 对比 map

map是一种有索引的数据存储方式,即key-value结构。c++中,map有两种常见实现,分别是unordered_map与map。

#介绍

unordered_map底层使用了哈希表(Hash table,也称散列表),map底层使用了自平衡二叉查找树(类红黑树)。

#对比

正如名字里展示的那样,unordered_map是没有顺序的,而map默认按照key的值从小到大的顺序排序。下面是两种实现的时间复杂度对比。

unordered_map map
查找 log(n) 平均O(1);最差O(n)
插入 log(n) + 再平衡 平均O(1);最差O(n)
删除 log(n) + 再平衡 平均O(1);最差O(n)

stackoverflow上有两种实现的应用对比[1],注意,不同的数据,不同的编译器,不同版本的编译器,都会对实际情况产生影响,下面的测试实例仅供参考。

#选择

在以下情况,建议使用map:

  1. 你需要这些元素有顺序
  2. 没有了

其他情况,都建议使用unordered_map。