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對象有一個first對象對應key,一個second對象對應value。
當我們想查詢某個key是否在map中時,我們最長用如下方法:
第1種方法:
第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; 先檢查該字符串是否存在于該set中 while(cin>>theWord){if(set.count(theWord))continue;elsemap_word[theWord]++; }在以上代碼中,如果輸入的字符包含在set中,則執行continue跳出當前迭代,否則執行else語句,將該key值添加至map中,對于任何key值set只保留一份(當然map也一樣),如果想保留多份請使用multiset和multimap。
map和set在進行添加元素時就已經對內部元素進行了排序,從大到小的順序。
此時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++流对象
- 下一篇: 数据结构与算法-链表