原 c++中map與unordered_map的區別

c++中map與unordered_map的區別

頭文件

  • map: #include < map >
  • unordered_map: #include < unordered_map >

內部實現機理

  • map: map內部實現了一個紅黑樹,該結構具備自動排序的功能,所以map內部的全部元素都是有序的,紅黑樹的每個節點都表明着map的一個元素,所以,對於map進行的查找,刪除,添加等一系列的操做都至關因而對紅黑樹進行這樣的操做,故紅黑樹的效率決定了map的效率。
  • unordered_map: unordered_map內部實現了一個哈希表,所以其元素的排列順序是雜亂的,無序的

優缺點以及適用處

  • map 
    • 優勢: 
      • 有序性,這是map結構最大的優勢,其元素的有序性在不少應用中都會簡化不少的操做
      • 紅黑樹,內部實現一個紅黑書使得map的不少操做在lgnlgn的時間複雜度下就能夠實現,所以效率很是的高
    • 缺點: 
      • 空間佔用率高,由於map內部實現了紅黑樹,雖然提升了運行效率,可是由於每個節點都須要額外保存父節點,孩子節點以及紅/黑性質,使得每個節點都佔用大量的空間
    • 適用處,對於那些有順序要求的問題,用map會更高效一些
  • unordered_map 
    • 優勢: 
      • 由於內部實現了哈希表,所以其查找速度很是的快
    • 缺點: 
      • 哈希表的創建比較耗費時間
    • 適用處,對於查找問題,unordered_map會更加高效一些,所以遇到查找問題,常會考慮一下用unordered_map

note:

    • 對於unordered_map或者unordered_set容器,其遍歷順序與建立該容器時輸入元素的順序是不必定一致的,遍歷是按照哈希表從前日後依次遍歷的
相關文章
相關標籤/搜索