關聯容器
關聯容器共享大部分——但不是全部——順序容器的操作。關聯容器不提供front, push_front, pop_front, back, push_back, pop_back等操作。
一、map和set型別
1、關聯容器的型別
(1)map定義的型別:
map::key_type; //鍵的型別 const string
map::value_type; //map所存元素的型別 pair型別
map的鍵型別key_type必須支援《操作符。(元素按順序存放)
(2)set定義的型別
在set容器中,儲存的元素型別(value_type)不是pair型別,而與key_type相同的型別。與map型別一樣,set容器儲存的鍵也必須是唯一的,而且不能修改。
2、map物件的定義(set型別的定義和使用除了不支援下標操作和儲存的型別不同以外,其他的一樣。這裡不做具體介紹)
mapm;
mapm(m2);
mapm(b,e);
map::iterator ite = m.begin();
ite->first = "hwl"; //error:key is const
sets;
sets(s2);
sets(b.e);
3、
map型別的訪問
(1)下標訪問
m["hwl"]; //m中沒有鍵值為hwl的新增乙個,採用值初始化方式初始化值。有的話訪問m的值。
//典型的用法:統計詞頻
string wrods;
mapwords_count;
while (cin>>words)
(2)使用count檢查map物件中某鍵是否存在(0 / 1)
int occurs = 0;
if (words_count.count("hwl"))
兩次查詢map中的元素效率低。
(3)find查詢map中的元素(返回元素迭代器 / end迭代器)
int occurs = 0;
map::iterator ite = words_count.find("hwl");
if (ite != words_count.end())
4、map物件和set物件新增元素
mapwords;
setkeys;
//...1
pair::iterator,bool> re = wrods.insert(map::value_type("hwl",1));
pair::iterator,bool> re = wrods.insert(make_pair("hwl",1));
pair::iterator,bool> re = keys.insert("hwl");
//...2
wrods.insert(b,e);
keys.insert(b,e);
//...3
words.insert(ite,value_type);
5、map物件刪除元素
mapwords;
words.erase("hwl"); //返回size_type型別(0 / 1)
words.erase(ite); //返回void,ite所指的元素必須存在
words.erase(b,e); //返回void
二、multimap和multiset型別
multimap和multiset所支援的操作分別於map和set的操作相同,只有乙個例外:multimap不支援下標運算。(因為乙個鍵對應多個值)為了順應乙個鍵對應多個值這一性質,map和multimap,set和multiset中相同的操作都以不同的方式做出了一定修改。
在使用multimap和multiset時,對於某個鍵,必須做好處理多個值的準備,而非只有單一值。
1、元素的新增和刪除
multimapauthors;
authors.insert(make_pair("hwl","ibnfgmgm"));
authors.insert(make_pair("hwl","ibn123333"));
multimap::size_type cnt = authors.erase("hwl");//返回刪除的個數
authors.erase(ite);//返回void
authors.erase(b,e);//返回void
2、查詢元素
map和set的元素師按順序儲存的。而multimap和multiset也一樣。如果某個鍵對應多個值的話,他們在容器中時相鄰存放的。
(1)使用find和count操作
count 統計某個鍵在容器中出現的次數;
find操作返回指向第乙個擁有正在查詢的例項的迭代器;
(2)與眾不同的解決方案
authors.lower_bound(key); //返回乙個迭代器,指向鍵不小於key的第乙個元素
authors.upper_bound(key); //返回乙個迭代器,指向鍵大於key的第乙個元素
authors.equal_range(key); //返回乙個pair物件第乙個元素等價於authors.lower_bound(key),第二個等價於authors.upper_bound(key);
pairpos = authors.equal_range(key);
關聯容器總結
1.容器型別 按關鍵字有序儲存元素 map 用來儲存鍵值對,關鍵字不可以重複 set 只儲存關鍵字,關鍵字不可重複 multimap 用來儲存鍵值對,關鍵字可以重複 multiset 只儲存關鍵字,關鍵字可以重複 無序集合 unordered map 用雜湊函式組織的 mapunordered se...
c 關聯容器
1.map建構函式 mapm 普通初始化 mapm m2 複製初始化法 mapm b,e 另乙個map物件的迭代器初始化法 注意 1 鍵值型別必須定義 操作符號,資料訪問時需要呼叫。2 m aaa 下表訪問方式導致的結果是,若鍵對應的值不存在,則插入該鍵值對應的預設值。2.map插入操作 m.ins...
C 關聯容器
1.關聯容器是通過關鍵字來儲存和訪問資料的。關聯容器分為兩大類 map和set。其中,map是通過鍵值對來操作的,這裡的鍵就是關鍵字,值就是對應的資料。例如 mapm 定義了乙個空的map變數m,它的關鍵字型別是int,關鍵字對應的值的型別是int。可以將map理解成為函式,關鍵字是自變數,關鍵字對...