C 關聯容器總結

2021-06-20 13:37:18 字數 2849 閱讀 8378

關聯容器

關聯容器共享大部分——但不是全部——順序容器的操作。關聯容器不提供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理解成為函式,關鍵字是自變數,關鍵字對...