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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++ 关联容器

發(fā)布時間:2024/4/11 c/c++ 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ 关联容器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C++中對于容器的分類主要分為:順序容器和關聯容器。
順序容器:主要是靠元素在容器中的存儲位置保存和訪問。
關聯容器:元素主要是靠關鍵字來保存和訪問。
關聯容器和順序容器的很多行為是一樣的,不同之處反映了關鍵字的作用。
關聯容器支持高效的關鍵字查找和操作。兩個主要的關聯容器為:map和set。

map:被定義為一對數值(pair()),其中key通常是字符串,作為索引;另一個數值是value。字典就是map的一種典型應用。如果想編寫一個統計某個文字在一篇文章中出現的次數,則可以建立一份map,其中key設為待統計的字符串,value作為該字符出現的次數。

#include<iostream> #include<map> map<string, int>map_word

輸入key/value值最簡單的方法是:

map_word['theWord'] = 1

對于字數的統計我們可以使用如下代碼:

string strInput while(cin>>strInput)map_word[strInput]++

其中表達式map_word[strInput]會取出與strInput相對應的value值,如果strInput不在map中則會將該值添加到map中,并置為1.
由于關聯容器并沒有下標的概念,所以如果想對關聯容器進行遍歷,則使用其迭代器進行,如下:

map<string, int>::iterator it; it = map_word:began() for(;it!=map_word:end();it++)cout<<it->first<<it->second<<endl;

map對象有一個first對象對應key,一個second對象對應value。
當我們想查詢某個key是否在map中時,我們最長用如下方法:
第1種方法:

if(!map['theKey'])//theKey并不存在與該map中。 使用這種方法有一個非常的大的缺點就是當map中沒有這個key時,會將該鍵加入到map中,而其對應的value中會被設置為默認值0

第2種方法:使用map的find()函數,我們將要查找的key傳入并調用

int nValue; map<string, int>::iterator it; if(it::end()!=map_word.find('theKey'))nValue = it->second;

第3中方法:

int nValue=0; string theWord; if(map_word.count(theWord))//相應的key存在nValue = map_word[theWord]

set:是由一群key組成的,沒有對應的value值。如果我們想知道某個值是否在集合中,就可以使用set。例如,我們在寫一篇文章時,可能不想使用某些字符,此時我們就可以把不想使用的文字摘出來,使用set保存這些字符,在向map中添加字符時,先查找該字符是否在set中,元素類型為string。

#include<iostream> #include<set> #include<string> string theWord; set<string> set; 先檢查該字符串是否存在于該setwhile(cin>>theWord){if(set.count(theWord))continue;elsemap_word[theWord]++; }

在以上代碼中,如果輸入的字符包含在set中,則執(zhí)行continue跳出當前迭代,否則執(zhí)行else語句,將該key值添加至map中,對于任何key值set只保留一份(當然map也一樣),如果想保留多份請使用multiset和multimap。
map和set在進行添加元素時就已經對內部元素進行了排序,從大到小的順序。

int test[10] = {1,3,3,8,4,1,9,7.2} vector<int> vec(test, test+10) set<int> iSet(vec.began(), vec.end())

此時iSet的元素將是

{1,2,3,7,8,9}

如果想為set添加元素可以使用insert函數

iSet,insert(vec.began(), vec.end())//添加某一范圍的元素值 iSet.insert(19)//添加單一元素

在set上進行迭代和其他容器一樣的使用方式:

set<int>::iterator it; for(;it!=iSet.end();it++) cout<<*it<<endl;

總結

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

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