两种结构都以键值对的形式存储元素,并且提供成员函数来协助高效地插入,查询和删除键值对。
但是他们在以下的几个方面有区别:
内部实现
内存使用
时间复杂度
内部实现
std::map将元素存储在一个平衡二叉树中,所以元素是有序存储的。
std::unordered_map使用哈希表来存储元素,元素并不是有序存储。
内存使用
unordered_map比ordered_map更占用内存,因为需要额外的内存来存储哈希表。
查找时间复杂度
std::map的查找时间复杂度是O(log n)。
std::unordered_map最佳的查找时间复杂度是O(1),如果哈希函数不是很好的话,最糟糕的复杂度会是O(n)。
什么时候选择map:
当你需要低内存占用率
当你希望序列是有序的
当你需要稳定的表现
什么时候选择unordered_map
当你有一个很好的哈希函数和对内存占用率没有限制时