在PAT裡使用map還是unordered_map?
阿新 • • 發佈:2018-11-17
時間複雜度
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。