日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

STL系列:map和unordered_map

發布時間:2025/3/21 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 STL系列:map和unordered_map 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

map和unordered_map的使用

unordered_map的用法和map是一樣的,提供了insert,size,count,find等操作,并且里面的元素也是以pair類型來存貯的。

其底層實現是完全不同的,上方已經解釋了,但是就外部使用來說卻是一致的。

C++ Map常見用法說明


map

包含在頭文件#include < map >中。

map是STL的一個關聯容器,它提供一對一(第一個為key,每個key只能在map中出現一次,第二個為value)的數據處理能力。map內部自建一顆紅黑樹(一種非嚴格意義上的平衡二叉樹),所以在map內部所有的數據都是有序的,且map的查詢、插入、刪除操作的時間復雜度都是O(logN)。在使用時,map的key需要定義operator<。

map中的元素是按照二叉搜索樹(又名二叉查找樹或者二叉排序樹,特點就是左子樹上所有節點的鍵值都小于根節點的鍵值,右子樹所有節點的鍵值都大于根節點的鍵值)存儲的,使用中序遍歷可將鍵值按照從小到大遍歷出來。


unordered_map

包含在頭文件unordered_map: #include < unordered_map >中。

unordered_map和map類似,都是存儲的key-value的值,可以通過key快速索引到value。不同的是unordered_map不會根據key的大小進行排序,存儲時是根據key的hash值判斷元素是否相同,即unordered_map內部元素是無序的。unordered_map的key需要定義hash_value函數并且重載operator==。

unordered_map的底層是一個防冗余的哈希表(采用除留余數法)。哈希表最大的優點,就是把數據的存儲和查找消耗的時間大大降低,時間復雜度為O(1);而代價僅僅是消耗比較多的內存。

基本原理是使用一個下標范圍比較大的數組來存儲元素。可以設計一個哈希函數(hash函數,也叫做散列函數),使得每個元素的key都與一個函數值(即數組下標,hash值)相對應,于是用這個數組單元來存儲這個元素;也可以簡單的理解為,按照key為每一個元素“分類”,然后將這個元素存儲在相應“類”所對應的地方,稱為桶

但是,不能夠保證每個元素的key與函數值是一一對應的,因此極有可能出現對于不同的元素,卻計算出了相同的函數值,這樣就產生了“沖突”,換句話說,就是把不同的元素分在了相同的“類”之中。總的來說,“直接定址”與“解決沖突”是哈希表的兩大特點。一般可采用拉鏈法解決沖突。

無序容器的性能依賴于hash函數的質量和桶的數量和大小。


舉例說明map的有序性和unordered_map的無序性

#include <iostream> #include <unordered_map> #include <map> #include <string> using namespace std; int main() { //注意:VS2012及以下版本不支持{}賦值unordered_map<int, string> myMap={{ 5, "張大" },{ 6, "李五" }};//使用{}賦值myMap[2] = "李四"; //使用[ ]進行單個插入,若已存在鍵值2,則賦值修改,若無則插入。myMap.insert(pair<int, string>(3, "陳二"));//使用insert和pair插入//記住pair類型,可以通過使用make_pair來生成pair對象。//遍歷輸出+迭代器的使用auto iter = myMap.begin();//auto自動識別為迭代器類型unordered_map<int,string>::iteratorwhile (iter!= myMap.end()){ cout << iter->first << "," << iter->second << endl; ++iter; } //查找元素并輸出+迭代器的使用auto iterator = myMap.find(2);//find()返回一個指向2的迭代器if (iterator != myMap.end())cout << endl<< iterator->first << "," << iterator->second << endl; system("pause"); return 0; }

此時用的是unordered_map,輸出的結果為:

若把unordered_map換成map,輸出的結果為:


優缺點以及適用處

map:

  • 優點:
  • 有序性,這是map結構最大的優點,其元素的有序性在很多應用中都會簡化很多的操作
  • 紅黑樹,內部實現一個紅黑書使得map的很多操作在lgn的時間復雜度下就可以實現,因此效率非常的高
  • 缺點: 空間占用率高,因為map內部實現了紅黑樹,雖然提高了運行效率,但是因為每一個節點都需要額外保存父節點、孩子節點和紅/黑性質,使得每一個節點都占用大量的空間

  • 適用處:對于那些有順序要求的問題,用map會更高效一些

  • unordered_map:

  • 優點: 因為內部實現了哈希表,因此其查找速度非常的快
  • 缺點: 哈希表的建立比較耗費時間
  • 適用處:對于查找問題,unordered_map會更加高效一些,因此遇到查找問題,常會考慮一下用unordered_map
  • 總結:
    1. 內存占有率的問題就轉化成紅黑樹 VS hash表 , 還是unorder_map占用的內存要高。
    2. 但是unordered_map執行效率要比map高很多
    3. 對于unordered_map或unordered_set容器,其遍歷順序與創建該容器時輸入的順序不一定相同,因為遍歷是按照哈希表從前往后依次遍歷的


    set和unordered_set的使用方法類似于map和unordered_map,詳情請見:
    【總結】unordered_map,unordered_set,map和set的用法和區別

    總結

    以上是生活随笔為你收集整理的STL系列:map和unordered_map的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 久热精品视频在线观看 | 免费在线观看黄网 | 日韩一区二区在线免费观看 | 3d动漫精品啪啪一区二区竹菊 | 一直草 | 靠逼视频免费网站 | 岛国一区二区三区 | 亚洲精品久久久久久国 | 色婷婷激情av | 97精品一区二区三区 | 午夜影院在线观看免费 | 天天综合干| 三级色网站 | 国产精品久久久久三级无码 | 色就操| 欧美激情亚洲综合 | 99精品国产99久久久久久97 | 日本视频中文字幕 | 日韩在线中文 | 蜜臀视频在线观看 | 黄色一级大片在线免费看国产一 | 亚洲精品资源在线 | av地址在线| 国产激情视频在线 | 熟睡人妻被讨厌的公侵犯 | 亚洲欧美精品在线观看 | 午夜影院 | www.精品国产| 国产97超碰 | 免费黄色片子 | 伊人久久大 | 永久在线观看 | 黄色免费网站视频 | 中文字幕女同女同女同 | 91精品国产入口在线 | 国产欧美在线观看不卡 | 人妻少妇精品无码专区久久 | 亚洲视频一区在线 | 国产精品v日韩精品v在线观看 | 爱爱中文字幕 | 黄网址在线观看 | 欧美一区二区黄片 | 岛国av中文字幕 | 欧美寡妇性猛交ⅹxxx | 韩国性经典xxxxhd | 国产成人精品一区二区 | av在线资源网站 | 久久精品伦理 | 国产精品免费入口 | 日韩精品一区中文字幕 | 久久久久久av无码免费看大片 | 琪琪电影午夜理论片八戒八戒 | 综合久久综合久久 | 亚洲爆乳无码一区二区三区 | 饥渴丰满的少妇喷潮 | 免费黄色在线网站 | 亚洲av男人的天堂在线观看 | 日韩色图片 | 色老汉视频 | 18岁禁黄网站 | 天堂аⅴ在线最新版在线 | 久久久91精品国产一区二区三区 | 一区二区亚洲视频 | 欧美色哟哟 | 少妇高潮淫片免费观看 | 蜜桃成熟时李丽珍国语 | 桃色av网站 | 奇米影视四色7777 | 国产一区视频网站 | 久久综合精品国产二区无码不卡 | 久久久久久久黄色片 | 久久黄色影院 | 亚洲视频精品在线 | 日韩一区在线观看视频 | 日韩欧美无 | 少妇被狂c下部羞羞漫画 | av大全网站 | 国产偷v国产偷v亚洲高清 | 婷婷av一区二区三区 | 国产又粗又猛又黄又爽 | 国产精品国产精品国产专区蜜臀ah | 成人影片在线播放 | 国产传媒视频在线 | 黄色三级大片 | 四虎三级| 欧美性粗暴 | 日韩avav| 四虎福利| 亚洲欧美日韩在线不卡 | www.蜜臀av.com| 婷婷色中文网 | 波多野结衣免费观看视频 | 亚洲欧洲视频 | 国产精品xxxx喷水欧美 | heyzo在线播放 | 5a毛片| 91大神视频在线播放 | 天天干中文字幕 | 动漫美女揉胸 |