原 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容器,其遍歷順序與建立該容器時輸入元素的順序是不必定一致的,遍歷是按照哈希表從前日後依次遍歷的
歡迎關注本站公眾號,獲取更多信息