成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

C++map的常用用法(超詳細(xì))(*^?^)人(^?^*)-創(chuàng)新互聯(lián)

C++中的map翻譯為映射,不是地圖!??!也是常用的STL容器。它在算法競賽中應(yīng)用十分廣泛,因?yàn)閙ap可以將任何基本類型(包括STL容器)映射到任何基本類型(包括STL容器),十分靈活。因此我們很有必要來熟練map的常用用法。

橋東ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:028-86922220(備注:SSL證書合作)期待與您的合作!

目錄

1、map的定義

2、map容器內(nèi)元素的訪問

3、map常用函數(shù)實(shí)例解析:

1、find():

2、erase():

3、size():

4、clear():

4、拓展


1、map的定義

單獨(dú)定義一個(gè)map:

mapmp;

其中,typename1是鍵的類型,typename2是值的類型。

注:如果是字符串到整型的映射,必須使用string而不能用char數(shù)組!

mapmp;

這是因?yàn)閏har數(shù)組作為數(shù)組,是不能被作為鍵值的。所以如果想用字符串做映射,必須用string。

再舉個(gè)栗子例子:map的鍵和值也可以是STL容器,例如以下代碼將一個(gè)set容器映射到一個(gè)字符串:

map, string>mp;

2、map容器內(nèi)元素的訪問

一般有兩種訪問方式:通過下標(biāo)訪問或通過迭代器訪問:

1、通過下標(biāo)訪問:

和普通數(shù)組一樣,例如一個(gè)定義為mapmp的map來說,可以直接使用mp['c']的方式來訪問它對(duì)應(yīng)的int整數(shù)??梢灾苯邮褂胢p['c'] = 20這樣的方式來賦值:

mapmp; 
mp['c'] = 20;
cout<< mp['c'];	//答案輸出20

但是要注意的是,map中的鍵是唯一的,例如以下代碼:

mapmp; 
mp['c'] = 20;
mp['c'] = 30;	//30覆蓋了20 
mp['c'] = 666; 	//666覆蓋了30 
cout<< mp['c'];	//答案輸出666

2、通過迭代器訪問:

map迭代器的定義和其他STL容器迭代器定義的方式相同:

map::iterator it;

這樣就得到了迭代器?it 。

map可以使用it->first來訪問鍵,it->second來訪問值:

#include#includeusing namespace std;
int main(){
	mapmp; 
	mp['a'] = 222;
	mp['b'] = 333;	
	mp['c'] = 444;
	for(map::iterator it = mp.begin(); it != mp.end(); it++){
		cout<< it->first;	 
		cout<< " "; 
		cout<< it->second;
		cout<< endl;
	} 	
	return 0;
}

代碼輸出結(jié)果:

a 222
b 333
c 444

還有一點(diǎn)要補(bǔ)充,就是map會(huì)以鍵從小到大的順序自動(dòng)排序,如:

mp['c'] = 222;
mp['a'] = 333;	
mp['b'] = 444;

順序輸出結(jié)果是(即按a< b< c的順序從小到大排序):

a 333
b 444
c 222

上述現(xiàn)象是因?yàn)椋琺ap內(nèi)部是由紅黑樹實(shí)現(xiàn)的(set也是),在建立映射的過程中,會(huì)自動(dòng)實(shí)現(xiàn)從小到大排序功能。

3、map常用函數(shù)實(shí)例解析: 1、find():

find(key)返回鍵為key映射的迭代器,時(shí)間復(fù)雜度為O(logN),N為map中映射的個(gè)數(shù):

#include#includeusing namespace std;
int main(){
	mapmp; 
	mp['a'] = 222;
	mp['b'] = 333;	
	mp['c'] = 444;
	map::iterator it = mp.find('b');
	cout<< it->first<< " "<< it->second;
	return 0;
}

輸出結(jié)果:

b 333

2、erase():

erase()有兩種用法:1、刪除單個(gè)元素。2、刪除一個(gè)區(qū)間內(nèi)所有的元素。

① 刪除單個(gè)元素:

mp.erase(it),it為需要?jiǎng)h除的元素的迭代器。時(shí)間復(fù)雜度為O(1):

#include#includeusing namespace std;
int main(){
	mapmp; 
	mp['a'] = 222;
	mp['b'] = 333;	
	mp['c'] = 444;
	map::iterator it = mp.find('b');
	mp.erase(it);
	for(map::iterator it = mp.begin(); it != mp.end(); it++){
		cout<< it->first<< " "<< it->second<< endl;
	}
	return 0;
}

輸出結(jié)果:

a 222
c 444

mp.erase(key),key為要?jiǎng)h除的映射的鍵。時(shí)間復(fù)雜度O(logN),N為map內(nèi)元素的個(gè)數(shù):

#include#includeusing namespace std;
int main(){
	mapmp; 
	mp['a'] = 222;
	mp['b'] = 333;	
	mp['c'] = 444;
	//map::iterator it = mp.find('b');
	//mp.erase(it);
	mp.erase('b');
	for(map::iterator it = mp.begin(); it != mp.end(); it++){
		cout<< it->first<< " "<< it->second<< endl;
	}
	return 0;
}

輸出結(jié)果:

a 222
c 444

② 刪除一個(gè)區(qū)間內(nèi)所有的元素:

mp.erase(first, last),其中,first為需要?jiǎng)h除的區(qū)間的起始迭代器,last為需要?jiǎng)h除的區(qū)間末尾迭代器的下一個(gè)地址,即為刪除左閉右開的區(qū)間[first, last)。時(shí)間復(fù)雜度為O(last - first):

#include#includeusing namespace std;
int main(){
	mapmp; 
	mp['a'] = 222;
	mp['b'] = 333;	
	mp['c'] = 444;
	map::iterator it = mp.find('b');
	mp.erase(it, mp.end()); //刪除it之后的所有映射,即b 333和 c 444 
	//mp.erase(it);
	//mp.erase('b');
	for(map::iterator it = mp.begin(); it != mp.end(); it++){
		cout<< it->first<< " "<< it->second<< endl;
	}
	return 0;
}

輸出結(jié)果:

a 222

3、size():

size()用來獲得map中映射的對(duì)數(shù),復(fù)雜度為O(1)。

#include#includeusing namespace std;
int main(){
	mapmp; 
	mp['a'] = 222;
	mp['b'] = 333;	
	mp['c'] = 444;
	cout<< mp.size(); 
	return 0;
}

輸出結(jié)果:

3

4、clear():

clear()用來清空map中的所有元素,復(fù)雜度為O(N),N為map中元素個(gè)數(shù):

#include#includeusing namespace std;
int main(){
	mapmp; 
	mp['a'] = 222;
	mp['b'] = 333;	
	mp['c'] = 444;
	mp.clear();	//清空map
	cout<< mp.size(); 
	return 0;
}

輸出結(jié)果:

0

4、拓展

map的鍵和值是唯一的,如果需要一個(gè)鍵對(duì)應(yīng)多個(gè)值,就只能用multimap。另外,C++11標(biāo)準(zhǔn)新增了unordered_map,以散列代替map內(nèi)部的紅黑樹實(shí)現(xiàn),使其可以用來處理只映射而不按key排序的需求,速度比map要快得多。

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

分享文章:C++map的常用用法(超詳細(xì))(*^?^)人(^?^*)-創(chuàng)新互聯(lián)
網(wǎng)頁地址:http://jinyejixie.com/article4/cchhie.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷、Google標(biāo)簽優(yōu)化網(wǎng)站設(shè)計(jì)、面包屑導(dǎo)航網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

綿陽服務(wù)器托管
砚山县| 河西区| 聂荣县| 呼伦贝尔市| 宁德市| 眉山市| 萨嘎县| 深州市| 仙游县| 太和县| 佳木斯市| 余干县| 寿光市| 翁牛特旗| 墨玉县| 莱州市| 正蓝旗| 盐亭县| 青阳县| 墨玉县| 邹城市| 建瓯市| 高台县| 余干县| 思茅市| 清苑县| 南昌市| 南城县| 子洲县| 昭通市| 抚宁县| 大丰市| 武宣县| 河源市| 稻城县| 健康| 彰化市| 高雄县| 麦盖提县| 乌拉特后旗| 五寨县|