C++中 unordered_map 與 map 的區別

由於項目用到了,故抽空先大致記錄一下unordered_map與map二者的區別

下面 以 unordered_map ( 無序map ) 爲主進行比較。

1、頭文件

#include <unordered_map>
#include <map>

2、unordered_map 內部實現:哈希表
【而 map 內部實現了紅黑樹】

3、unordered_map 查找效率:非常高
unordered_map 內部的Hash表通過把關鍵碼值映射到Hash表中一個位置來訪問記錄,查找的時間複雜度可達到O(1),其在海量數據處理中有着廣泛應用。
【而 map 則需要挨個遍歷查找,效率低下】

4、unordered_map 是否有序:無序
unordered_map 內部時哈希表,故當加入元素後,不會排序。
【而 map 內部實現了紅黑樹,故map存入元素時會自動排序,且默認升序】

分別舉例子
舉個 unordered_map 栗子:

    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<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 輸出結論:可看出爲有序。

結束:

分享也是自己對問題再次加深理解的方式,可能不全面,但絕對有用,後面將不斷完善~

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