map与unordered_map的区别
生活随笔
收集整理的這篇文章主要介紹了
map与unordered_map的区别
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
set/map底層實(shí)現(xiàn)的機(jī)制是紅黑樹(shù)。紅黑樹(shù)是一種近似于平衡的二叉查找樹(shù),默認(rèn)是按升序排序的。在紅黑樹(shù)上做查找、插入、刪除操作的時(shí)間復(fù)雜度為O(logN)。
紅黑樹(shù)的缺點(diǎn):空間占用率高,每一個(gè)節(jié)點(diǎn)都需要額外保存父節(jié)點(diǎn)、孩子節(jié)點(diǎn)和紅/黑性質(zhì),使得每一個(gè)節(jié)點(diǎn)都占用大量的空間。
?
std::unordered_map對(duì)應(yīng)哈希表,哈希表的特點(diǎn)就是查找效率高,時(shí)間復(fù)雜度為常數(shù)級(jí)別O(1),而額外空間復(fù)雜度則要高出許多。所以對(duì)于需要高效率查詢的情況,使用std::unordered_map容器。而如果對(duì)內(nèi)存大小比較敏感或者數(shù)據(jù)存儲(chǔ)要求有序的話,則可以用std::map容器。
區(qū)別:
????
//兩者的用法是一致的
#include <iostream> #include <stdio.h> #include <string.h> #include <thread> #include <stdlib.h> #include <unordered_map>using namespace std;int main() {unordered_map<string, string> mp;mp.insert(make_pair("red", "#FF0000"));mp.insert(make_pair("green", "#00FF00"));mp.insert(make_pair("blue", "#0000FF"));for (auto it = mp.begin(); it != mp.end(); ++it) {cout << "Key:[" << it->first << "] Value:[" << it->second << endl;}cout << "====================================================" << endl;mp["black"] = "#000000";mp["black"] = "#000000"; //可以放同樣的元素,但是會(huì)過(guò)濾掉重復(fù)的for (auto it = mp.begin(); it != mp.end(); ++it) {cout << "Key:[" << it->first << "] Value:[" << it->second << endl;}cout << "mp.size()=" << mp.size() << endl;string key = "hel";auto it = mp.find(key);if (it == mp.end()) {std::cout << key << " not found" << endl;} else {std::cout << "Found " << key << endl;}return 0; }在CodeBlocks上的運(yùn)行結(jié)果是:
?
?
總結(jié)
以上是生活随笔為你收集整理的map与unordered_map的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: git bash提交代码步骤
- 下一篇: 软件工程——螺旋模型