關聯容器
關聯容器支援通過鍵來高效地查詢和讀取元素。兩個基本的關聯容器型別是map和set。vrquticacamap的元素以鍵-值對的形式組織:鍵用作元素在map的索引,而值則表示所儲存和讀取的資料。set僅包含乙個鍵,並有效地支援關於某個鍵是否存在的查詢。set和map型別的物件不允許為同乙個鍵新增第二個元素。如果vrquticaca乙個鍵必須對應多個例項,則需使用multimap或mutiset型別,這兩種型別允許多個元素擁有相同的鍵。
pair型別:在標頭檔案utility中定義。
pair的建立和使用:
複製** **如下:
#include
pair author("peter",30);
couttypedef pair student;
student s1,s2("aaa","bbb");
s1.first="ccc";
s1.second="ddd";
//使用make_pair函式生成乙個新的pair物件
string first="eee",second="fff";
student s3=make_pair(first,second);
map型別:map是鍵-值對的集合。
map::key_type 在map中用做索引的鍵的型別
map::mapped_type 在map中用作關聯的值的型別
map::value_type 乙個pair型別
map迭代器進行解引用將產生pair型別的物件:
複製** **如下:
map::iterator map_it = word_count.begin();
cout使用下標訪問map物件:新增鍵-值對,有兩種實現方法。可以用insert成員實現,或者,先用下標操作符獲取元素,然後給獲取的元素賦值。
使用下標訪問map與使用下標訪問陣列或vector的行為截然不同;用下標訪問不存在的元素將導致在map容器中新增乙個新的元素,它的鍵即為該下標的值。
方法一:
複製** **如下:
map word_count;
word_count["peter"]=10;//相當於增加乙個鍵值對
//建立乙個map物件,用來記錄每個單詞出現的次數,十分簡潔。
map word_count;
string word;
while(cin>>word)
方法二:使用insert:
複製** **如下:
map word_count;
word_count.insewww.cppcns.comrt(map::value_type("aaa",1));
//用insert方法重寫單詞統計程式
map word_count;
string word;
while(cin>>word)
}查詢並讀取map中的元素: 用下標操作符,是一種比較簡單的方法,但是該方法有***,就是當該鍵不在map容器中,那麼下標操程式設計客棧作會插入乙個具有該鍵的新元素。
map容器提供了兩種操作:count和find
m.count(k) 返回m中k的出現次數,對於map物件只能是1或0,而對於mutimap容器,則可能會出現更多的值。
m.find(k) 返回按k索引返回的迭代器
count方法用於在map中查詢指定鍵是否存在的問題,而find方法適合用於解決在map容器中查詢指定鍵對應的元素的問題。
複製** **如下:
//讀取元素而又不插入新元素
int occurs;
map::iterator it= word_count.find("foobar");//不存在,則返回end迭代器
if(it!=word_count.end())//可能找不到
從map物件中刪除元素:m.erase(k) 刪除m中鍵為k的元素。返回值為被刪除元素的個數,對於map容器而言,其值必然是0或1。
m.erase(p) 從m中刪除迭代器p所指向的元素。返回值為void型別。
m.erase(b,e) 從m中刪除一段由一對迭代器範圍的元素。返回值為void型別。
map物件的迭代遍歷:
複製** **如下:
map word_count;
word_count["aaa"]=1;
word_count["bbb"]=2;
word_count["ccc"]=3;
map::const_iterator iter = word_count.begin();
while(iter!=word_count.end())
set型別:map容器是鍵-值對的集合,而set容器只是單純的鍵的集合。當只想知道乙個值是否存在時,使用set容器是最合適的。
在set中新增元素:
複製** **如下:
set set1;
pair::iterator,bool> p=set1.insert(1);//返回pair型別物件,包含乙個迭代器和乙個布林值
set1.insert(2);
int arr=;
set set2;
set2.insert(arr,arr+3);//返回void型別
從set中獲取元素:與map方法使用類似,使用find和count函式。
multimap和multiset型別:
map和set容器中,乙個鍵只能對應乙個例項。而multimap和multiset型別則允許乙個鍵對應多個例項。其支援的操作分別於map和set的操作相同,只有乙個例外:multiply不支援下標運算。
本文標題: c++primer筆記之關聯容器的使用詳解
本文位址:
C Primer 學習筆記之關聯容器
關聯容器 關聯容器支援通過鍵來高效地查詢和讀取元素。兩個基本的關聯容器型別是map和set。map的元素以鍵 值對的形式組織 鍵用作元素在map的索引,而值則表示所儲存和讀取的資料。set僅包含乙個鍵,並有效地支援關於某個鍵是否存在的查詢。set和map型別的物件不允許為同乙個鍵新增第二個元素。如果...
C Primer 筆記 關聯容器
關聯容器 associative container 支援通過鍵來高效的查詢和讀取元素。map 關聯陣列,元素通過鍵來儲存和讀取 set 大小可變的集合,支援通過鍵來快速讀取 multimap 支援同乙個鍵出現多次的map型別 multiset 支援同乙個鍵多次出現的set型別 pairp1 建立乙...
《C Primer》學習筆記 關聯容器
一,pair型別 pairp1 建立乙個空pair指標,兩個元素分別是t1,t2型別,採用值初始化 pairp1 v1,v2 first成員初始化為v1,second成員為v2 make pair v1,v2 建立新的pair物件 p1 p2 p1 p2 p.first 返回first成員 p.se...