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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

关联容器

發布時間:2025/4/16 编程问答 11 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关联容器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

關聯容器的類型:?

map:關聯數組;元素通過鍵來從存儲讀取

set:大小可變的集合,至此后通過建實現快速讀取

multimap:支持同一個鍵多次出現的map類型

multiset:支持同一個鍵多次出現的set類型

一般來說,如果希望有效地存儲不同值的集合,那么使用set比較合適,而map容器則更適用于需要存儲乃至修改每個鍵所干練的值的情況。在做某種文本處理時,可使用set保存要忽略的單詞。而字典是map的一種很好的應用,單詞本身是鍵而他的解釋說明則是值,

在開始介紹關聯容器之前必須先了解一種魚值相關的簡單的標準庫類型--pair類型;該類型在utility中定義。

pair的基本操作;

pair<string , string >anon;//

pair<string ,int >word_count;//包含一個空的string和一個空的int

pair<string,vector<int> >line;//包含一個空的string,和一個空vector;

當然也可以,在定義是為每個成員提供初始值;

pair<string,string> author("jame","joyce");

此時author的倆個公有成員first,second,就有了值,author.first="jame",,,,author.second=joce;

還可以這樣:

typedef pair<string ,string > author;

author pro("sfg","sfge");簡化其聲明;

make_pair(v1,v2);//以v1和v2的值創建一個新的pair對象,其元素分別是v1和v2的類型。

[cpp]?view plaincopy
  • #include?<utility>??
  • #include?<iostream>??
  • #include?<vector>??
  • #include?<string>??
  • using?namespace?std;??
  • int?main()??
  • {??
  • ????pair<string,int>pr;??
  • ????string?str;??
  • ????int?a;??
  • ????vector<?pair<string,int>?>vec;??
  • ????while?(cin>>str>>a)??
  • ????{??
  • ????????pr=make_pair(str,a);??
  • ????????vec.push_back(pr);??
  • ????}??
  • ??
  • ????return?0;??
  • }??

  • map類型可理解為關聯數組。使用鍵做為下表來獲取一個值。

    map的構造函數:

    map<k,v>m;//創建一個名為m的空map對象,其鍵和值的類型分別為k和v
    map<k,v>m(m2);//創建m2的副本m,m和m2必須有相同的鍵類型和值類型

    map<k,v>m(b,e);//創建map類型的對象m,存儲迭代器b和e標記的范圍內所有元素的副本,元素的類型必須能轉換為pair<const k,v>

    對于鍵的類型唯一的約束就是必須支持<操作符,至于是否支持其他的關系或想等運算則不作要求。

    map類定義的類型:

    map<k,v>::key_type;//map容器中,用作索引的鍵的類型

    map<k,v>::mapped_type;//map容器中。鍵所關聯的值的類型

    map<k,v>::value_type;//一個pair類型,它的first元素具有const map<>::key_type類型,而second元素則為map<>::mapped_type類型;

    在學習map接口時,需謹記value_type是pair類型,它的值成員可以修改,而建成員不能修改。

    1,map迭代器進行解引用將產生map的對象。

    [cpp]?view plaincopy
  • map<string,int?>mp??
  • map<string,int?>::iterator?mit=mp.begin();??
  • cout<<mit->first??
  • 對迭代器進行解引用將獲得一個pair對象, 它的first成員存放鍵,為const, 而second則存放值。

    2,給map添加元素

    定義了map容器后,下一步工作就是在容器中添加鍵值,該項工作可使用insert成員實現,map不支持front,push_front,push_back等操作。

    1)使用下標訪問map對象:

    map<string,int>word;

    word["anna"]=1;

    此段程序將發生以下事情:

    1.在word中查找鍵位anna的元素,沒有找到

    2.講一個姓的鍵值對插入到word中,它的鍵是const string類型的對象,保存anna,而他的值則是采用直初始化,就意味著本例中的值為0

    3.將這個新的鍵值對插入到word中

    4.讀取新插入的元素并將它的值賦為1;

    使用下標訪問不存在的元素將導致在map容器中添加一個新的元素,它的鍵即為下標值。

    [cpp]?view plaincopy
  • cout<<word["anna"];//通過anan訪問該元素;并輸出1;??
  • ++word["anna"];//訪問該元素并加1;??
  • cout<<word["anna"];//輸出值為2;??
  • 顯然,map下標操作符返回的類型與map迭代器進行解引用獲得的類型不相同;map迭代器返回value_type類型的值,包括const key_type和mapped_type類型成員的pair對象;而下標操作則返回一個mapped_type類型的值。

    2)下標行為的編程意義

    對于map容器如果下標所表示的鍵在容器中不存在則添加新元素,這一特征可使程序驚人的簡練;

    [cpp]?view plaincopy
  • map<string,int?>?word;??
  • string?str;??
  • while(cin>>str)??
  • ??++word[str];??
  • 這段程序創建了一個map對象,用來記錄單詞出現的次數,while循環每次從標準輸入讀取一個單詞,如果這是一個新單詞,則在word中添加該單詞為索引的新元素,如果讀入的單詞已經在map中則它所對應的值加1;

    ? ?其中最有趣的是,在單詞第一次出現時,會在word中創建并插入一個以該單詞為索引的新單詞,同時將它的值初始化為0;然后立即加1;所以每次在map中添加新元素時,搜統計的出現次數正好為1;

    map::insert的使用:

    word.insert(map<string,int>::value_type("Anna",1));

    可用兩種方法簡化:

    word.insert(make_pair("anna",1));

    或:typedef map<string,int>::value_tye valType;

    word.insert(valType("anna",1));

    map對象中一個給定鍵值對應一個元素,如果試圖插入的元素對應的鍵已經在容器中,則insert將不做任何操作。

    insert返回值為包含一個迭代器和一個bool值的pair對象。

    map<string,int >mp;

    pair<map<string,int>::iterator,bool>ret=mp.insert(word,1);

    使用下標存在一個很危險的副作用:如果該鍵不在map容器中那么下標操作會插入一個具有該鍵的新元素。有時著東西很有用但有時卻帶來危險

    例如若是我們只想知道某元素是否存在。。。。

    map容器提供倆個操作,count和find,用于檢查某個鍵是否存在而不會插入該鍵;

    m.count(k);//返回m中k出現的次數。

    m.find(k);//如果m容器中存在k索引的元素,則返回只想該元素的迭代器,如果不存在,則返回超出末端迭代器。


    從map中刪除元素

    map.erase(k);//刪除m中鍵為k的元素,返回size_type類型的值。表示刪除的元素個數

    map.erase(p);//從m中刪除迭代器p所指向的元素,p必須指向m中確實存在的元素,而且不能等于m.end;返回void

    map.erase(b,e);//從m中刪除一段范圍內的元素該范圍有迭代器對b和e標記,返回void

    map同樣提供begin和end運算。


    總結

    以上是生活随笔為你收集整理的关联容器的全部內容,希望文章能夠幫你解決所遇到的問題。

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

    主站蜘蛛池模板: 国产jjizz一区二区三区视频 | 欧美另类xxxx野战 | 在线手机av | 91se在线 | 免费视频91 | 欧美最猛性xxxxx(亚洲精品) | 中文有码av | 火影忍者羞羞漫画 | 日韩专区欧美专区 | 成人精品视频一区二区三区尤物 | 精品亚洲天堂 | 国产精品第九页 | 99视频这里有精品 | 国产一级久久久久毛片精品 | 色天堂在线视频 | 艹男人的日日夜夜 | 东京热一区二区三区四区 | 蜜臀久久精品久久久久 | 国产色一区二区 | 免费av看 | 高潮白浆| 欧美一区二区三区不卡视频 | 亚洲生活片 | 奇米四色在线视频 | 亚洲黄色免费视频 | 人妻在卧室被老板疯狂进入 | 不卡av中文字幕 | 天天射天天操天天干 | 久久久久亚洲av成人网人人软件 | 成人激情在线视频 | 日本一区三区 | 91快射 | 亚洲18在线看污www麻豆 | 久久亚洲第一 | 里番精品3d一二三区 | 日韩中文字幕 | 免费的黄色的视频 | 91理论片 | 黄色在线免费观看 | 国产三级三级三级 | 国产精品久久久久久久久久久久午夜片 | 伊人久久国产 | 亚洲精品视频观看 | 亚洲老女人视频 | 日韩视频一区二区在线观看 | 中文永久免费观看 | 成人a级免费视频 | 亚洲精选一区二区 | 在线免费视频 | 国产精品精品国产 | 91网在线| xxx69美国| 成人人人人人欧美片做爰 | 日韩理论片在线观看 | h视频免费在线观看 | 操欧美女人 | 黄色片亚洲| 午夜国产福利在线观看 | 日韩图片一区 | 日韩在线电影一区 | 日韩爽爽视频 | 国产毛片久久久久久久 | 激情综合网激情 | 伊人色av | 天堂中文网在线 | 免费av观看网站 | 国产情侣第一页 | 久久久噜噜噜www成人 | 天美麻花果冻视频大全英文版 | 这里只有精品免费视频 | 欧洲xxxxx| 奇米成人影视 | 精品久久一二三区 | 一区二区三区三区在线 | 国产一区视频在线 | 亚洲国产精品午夜久久久 | 久久久久逼 | 国内视频一区二区 | 日韩成人精品一区 | 国产成人三级 | 99re这里只有精品首页 | 肉丝袜脚交视频一区二区 | 被黑人啪到哭的番号922在线 | www.狠狠操 | 国产老女人精品毛片久久 | 色欲一区二区三区精品a片 在线观看黄网站 | 国产亚洲精品久久久久久青梅 | 色吊妞| 免费看黄视频的网站 | 亚洲欧洲中文 | 日本妇女毛茸茸 | 美女插插 | 亚洲一区影院 | 催眠美妇肉奴系统 | 九九热视频在线免费观看 | 免费又黄又爽又猛大片午夜 | 91精品婷婷国产综合久久竹菊 | 动漫女被黄漫免费视频 | 亚洲va国产va天堂va久久 |