时间复杂度
O(?) | map | unordered_map |
---|---|---|
Ordering | increasing order | no ordering |
Implementation | Self balancing BST(Red-Black Tree) | Hash Table |
search time | log(n) | O(1) -> Average ,O(n) -> Worst Case |
Insertion time | log(n) + Rebalance | O(1) -> Average ,O(n) -> Worst Case |
Deletion time | log(n) + Rebalance | O(1) -> Average ,O(n) -> Worst Case |
优缺点
耗时上:
map > unordered_map
内存上
map << unordered_map (远大于)
排序上:
map的元素是有序的,unordered_map是无序的。如果你有元素有序的需求,那么只能选择map。
map是使用红黑树实现的。unordered_map是用hash实现的。所以你使用unordered_map是要给容器提供hash函数的,而hash函数影响了unordered_map的性能。对于基本数据类型:STL是提供了hash函数的(不需要添加).。如int,string等等。所以如果你要使用自己定义的类型:unordered_map是不能使用的。
结论
我还没有遇到运行内存不足的题,但是超时的题一大堆。所以
在pat考试里:尽量用unordered_map,而不是map。