1. 簡介
Map也是一種關(guān)聯(lián)容器,它是 鍵—值對的集合,即它的存儲都是以一對鍵和值進行存儲的,Map通常也可以理解為關(guān)聯(lián)數(shù)組(associative array),就是每一個值都有一個鍵與值一一對應(yīng),因此,map也是不允許重復(fù)元素出現(xiàn)的。
同時map也具備set的相關(guān)功能,其底層也會將元素進行自動排序,
2. 相關(guān)文件
頭文件:#include<map>
3. 初始化
格式為:
template < class Key, class T, class Compare = less<Key>, class Alloc = allocator<pair<const Key,T> > > class map;
一共有4個值,其中第一個是鍵,第二個是值,這兩個元素呈現(xiàn)對應(yīng)的關(guān)系,接著第三個元素是比較器,其默認是降序排序,第四個是內(nèi)存配置器,負責(zé)內(nèi)存的分配和銷毀。我們常用的可以直接省去第三和第四個值的輸入,只輸入鍵和值即可。
4.迭代器
我們使用map<char,int> s提前建立了一個map
C98代碼如下:
for(map<char,int>::iterator it=s.begin();it!=s.end();it++){ cout<< it->first <<" --- " << it->second<<endl; }
這里我們需要注意一下,我們不能直接通過*it的輸出方式輸出值,因為map種含有兩個元素,相當于一個struct結(jié)構(gòu)體,是一個復(fù)合類型,C/C++中輸出復(fù)合類型需要我們指定復(fù)合類型的值。
因此我們輸出就變成了it->first 指定輸出鍵,it-<second指定輸出值(剛好就是英文的第一和第二的意思)
5.常用接口
我們使用map<char,int> s 預(yù)先創(chuàng)建了一個map,命名為s,方便舉例
a) 大小size()
返回鏈表元素的個數(shù)
函數(shù)原型:size_type size() const;
cout<<s.size()<<endl; //直接返回棧中元素的個數(shù)
b) 插入元素insert()
插入一個元素,插入元素的類型必須與創(chuàng)建的容器類型一致
函數(shù)原型:single element
pair<iterator,bool> insert (const value_type& val);
template <class P> pair<iterator,bool> insert (P&& val);
s.insert(pair<char,int>('d',4)); //這里的Pair表示一對的關(guān)系,相當于struct pair{char a;int b}的一對數(shù)據(jù),我們在接下來會詳細學(xué)pari的用法 //如果覺得這樣的方式比較困難,可以試著使用下標的方式進行數(shù)據(jù)輸入 s['d']=4; //這與上面的效果是一樣的。
c) 刪除元素erase()
刪除一個元素,或者是一段區(qū)間的元素,將會自動縮減空間使用。
函數(shù)原型:
iterator erase (iterator position);
iterator erase (iterator first, iterator last);
使用方法:
s.erase(s.begin()); //使用迭代器的方法刪除第一個元素 s.erase(s.begin(),s.end()); //刪除一段內(nèi)容,這里是全部刪除
清空元素clear()
將整個set集合中的內(nèi)容清空,注意,這里只是清空元素,其所占用的最大內(nèi)存空間還是不會改版的。
s.clear();
d) 查找元素find()
函數(shù)原型:iterator find (const value_type& val) const;
cout<< s.find('d')->second <<endl;
或者 實現(xiàn)找到的刪除指定元素
s.erase(s.find('d'));
C語言網(wǎng)提供由在職研發(fā)工程師或ACM藍橋杯競賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點擊了解:
一點編程也不會寫的:零基礎(chǔ)C語言學(xué)練課程
解決困擾你多年的C語言疑難雜癥特性的C語言進階課程
從零到寫出一個爬蟲的Python編程課程
只會語法寫不出代碼?手把手帶你寫100個編程真題的編程百練課程
信息學(xué)奧賽或C++選手的 必學(xué)C++課程
藍橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競賽課入門課程
手把手講解近五年真題的藍橋杯輔導(dǎo)課程