因爲項目用到了,故抽空先大體記錄一下unordered_map與map兩者的區別ide
一、頭文件code
#include <unordered_map> #include <map>
二、unordered_map 內部實現:哈希表
【而 map 內部實現了紅黑樹】排序
三、unordered_map 查找效率:很是高
unordered_map 內部的Hash表經過把關鍵碼值映射到Hash表中一個位置來訪問記錄,查找的時間複雜度可達到O(1),其在海量數據處理中有着普遍應用。
【而 map 則須要挨個遍歷查找,效率低下】string
四、unordered_map 是否有序:無序
unordered_map 內部時哈希表,故當加入元素後,不會排序。
【而 map 內部實現了紅黑樹,故map存入元素時會自動排序,且默認升序】it
分別舉例子
舉個 unordered_map 栗子:class
unordered_map<int, string> m_map; m_map.insert(pair<int, string>(3, "333")); m_map.insert(pair<int, string>(1, "111")); m_map.insert(pair<int, string>(4, "444")); m_map.insert(pair<int, string>(2, "222")); m_map.insert(pair<int, string>(5, "555")); unordered_map<int, string>::iterator iter = m_map.begin(); for (iter; iter != m_map.end(); iter++) { cout << iter->first << "," << iter->second.c_str() << endl; }
輸出:效率
3,333 1,111 4,444 2,222 5,555
unordered_map 輸出結論:可看出爲無序。遍歷
舉個 map 栗子:代碼裏只是把 unordered_map 換成了 map 而已。map
map<int, string> m_map; m_map.insert(pair<int, string>(3, "333")); m_map.insert(pair<int, string>(1, "111")); m_map.insert(pair<int, string>(4, "444")); m_map.insert(pair<int, string>(2, "222")); m_map.insert(pair<int, string>(5, "555")); map<int, string>::iterator iter = m_map.begin(); for (iter; iter != m_map.end(); iter++) { cout << iter->first << "," << iter->second.c_str() << endl; }
輸出:數據
1,111 2,222 3,333 4,444 5,555
map 輸出結論:可看出爲有序。
結束:
分享也是本身對問題再次加深理解的方式,可能不全面,但絕對有用,後面將不斷完善~