C++ map 與unordeered_map的區別和使用

轉自:https://blog.csdn.net/BillCYJ/article/details/78985895

  • 頭文件不同
  1. map:#include<map>
  2. unordered_map: #include<unordered_map>
  • 內部實現原理
  1. map:map內部實現是一個紅黑樹(紅黑樹是非常嚴格的平衡二叉搜索樹,而AVL(平衡二叉樹)是嚴格平衡二叉搜索樹),紅黑樹具有自動排序功能,因此map內部的所有元素都是有序的,紅黑樹的每個節點都代表着map的一個元素。因此,對於map進行的增刪改查相當於對紅黑樹進行操作。map中的元素是按照二叉搜索樹(又名二叉查找樹、二叉排序樹。特點是左子樹上所有節點的鍵值都小於根節點的鍵值,右節點的鍵值都大於根節點的鍵值)存儲的,使用中序遍歷可以將鍵值按照從小到大遍歷出來。
  2. unordered_map:內部實現了一個哈希表(又叫散列表,通過把關鍵碼值映射到hash表中一個位置來訪問記錄,查找的時間複雜度可達到O(1),其在海量數據處理中有着廣泛應用)。因此其元素的排列順序是無序的。哈希表介紹
  • 對比
  1. map
    1. 有序性(最大優點)
    2. 紅黑樹,內部實現一個紅黑樹使得map的很多操作在lgn的時間複雜度下就可以實現,效率高
    3. 缺點是空間佔用率高。因爲map內部實現紅黑樹,雖然提高了運行效率,但是每個節點都需要額外保存父節點、子節點和紅黑樹性質,是的每一個節點都佔用大量空間
    4. 適用處:適用於對順序要求的問題,用map回更高效
  2. unordered_map
    1. 優點是內部實現了哈希表,因此查找的速度非常快
    2. 缺點是哈希表的建立比較耗時間
    3. 適用於查找的問題
  • 總結
  1. 內存佔用率的問題可以轉換爲紅黑樹、hash表、還是unordered_map佔用的內存高.但Unordered_map的執行效率比map高
  2. unordered_map和map的用法是一樣的,但底層的實現是完全不同的。map採用紅黑樹,unordered_map採用哈希表

其他關於map和unordered_map的對比

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章