版權聲明:本文爲博主原創文章,未經博主允許不得轉載。
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的很多操作在lgn的時間複雜度下就可以實現,因此效率非常的高
- 缺點:
- 空間佔用率高,因爲map內部實現了紅黑樹,雖然提高了運行效率,但是因爲每一個節點都需要額外保存父節點,孩子節點以及紅/黑性質,使得每一個節點都佔用大量的空間
- 適用處,對於那些有順序要求的問題,用map會更高效一些
- 優點:
- unordered_map
- 優點:
- 因爲內部實現了哈希表,因此其查找速度非常的快
- 缺點:
- 哈希表的建立比較耗費時間
- 適用處,對於查找問題,unordered_map會更加高效一些,因此遇到查找問題,常會考慮一下用unordered_map
- 優點:
note:
- 對於unordered_map或者unordered_set容器,其遍歷順序與創建該容器時輸入元素的順序是不一定一致的,遍歷是按照哈希表從前往後依次遍歷的