国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

map/set的應用

2019-11-08 18:38:47
字體:
來源:轉載
供稿:網友

map/set的應用

關于map、set的一些基礎知識,,在之前的博客中已經大致有了一定的了解,,,,今天在這里,,,我們 來說說這兩種結構有什么樣的用處吧!!!!!!!!!(當然也會有一些關于此類的面試題)

使用 1、、、、、、、、、、、、、、、、

如果說要是給你一個字符串數組strs[],里面保存的是   一群人喜歡吃的水果種類 !!!!那么問題來了》》怎么樣 來統計 一下每種水果喜歡的人數是多少?????在此,,,我為大家提供了 ,,,三種方式來解決這問題;;;;假設得到的字符串數組為strs[]= {"蘋果","梨","香蕉","柑橘","桃子","蘋果","桃子","桃子","梨","桃子","蘋果"};

方法一:~~~~~~

我們可以先定義一個map,,,,然后 ,使用find函數查找,,,,如果找到,,,則人數++;否則 、、、、、將此水果插入到map中下面、、、、
void  Testmap(){	string strs[]= {"蘋果","梨","香蕉","柑橘","桃子","蘋果","桃子","桃子","梨","桃子","蘋果"};	map<string ,int> Countmap;//定義一個用來計數的map	Countnum(Countmap,strs,sizeof(strs)/sizeof(strs[0]));}
void Countnum(map<string,int>& Countmap,string* strs,const size_t& n ){	for(size_t i = 0;i < n ;i++)	{		map<string ,int>::iterator  it = Countmap.find(strs[i]);//從map中查找		if(it == Countmap.end())//如果沒有找到		{			Countmap.insert(make_pair(strs[i],1));//插入 ,,,并將人數給1		}		else		{			++(it->second);//找到了之后 就 將人數++		}	}}得到的結果 ::統計之前、、、、、、、、、、、、、、、、、、、、、、、統計之后這樣 就可以將 結果統計出來了;;;但是這樣的效率就低了點 。。。。。

方法二~~~~~

map有一個插入函數 insert   它的返回值是一個pair 類型  pair<iterator,bool>
pair<iterator,bool> insert (const value_type& val);這個函數簡單來說就是 這個意思;;;如果插入成功,,,那么返回的pair   的成員first為指向插入數據的迭代器,,,,,second  返回 true;否則,說明已有此數據 ,,,那么,,返回的pair的first為原數據的迭代器,,,,,second   為false;;;我們可以利用這一點 ,,,,
void Countnum(map<string,int>& Countmap,string* strs,const size_t& n ){	for(size_t i = 0;i < n ;i++)	{		pair<map<string,int>::iterator,bool> ret = Countmap.insert(make_pair(strs[i],1));		if(ret.second ==false)//如果沒有插入成功的話		{			ret.first->second++;//人數++		}	}}結果:               正確!!!!!!!!!!!這個方法比起方法1來說就簡單的多了  ;;;;

方法三~~~~~~~~~

這個就更簡單了 、、、、說到底 ,,,就是利用  map  重載的[]  ,,,,,,, 此函數 我已在之前的博客中 有說明了實現代碼:::
void Countnum(map<string,int>& Countmap,string* strs,const size_t& n ){	for(size_t i = 0;i < n ;i++)	{		Countmap[strs[i]]++;	}}

使用2、、、、、、、、、、

銜接上面的使用1,,,,,如果說、、、、要讓你 將 里面的水果將  按照喜歡人數少來排序;;;;這個又要怎么來做呢?????方法一············(死的方法)建立一個vector容器 ,,,,將里面的數據存下來然后排序
void  Testmap(){	string strs[]= {"蘋果","梨","香蕉","柑橘","桃子","蘋果","桃子","桃子","梨","桃子","蘋果"};	map<string ,int> Countmap;//定義一個用來計數的map	Countnum(Countmap,strs,sizeof(strs)/sizeof(strs[0]));	vector<map<string,int>::iterator>  v;	Sortmap(v,Countmap);}
struct Cmp//重載的比較函數{	bool Operator()(const map<string,int>::iterator& l					,const map<string,int>::iterator& r )	{		return l->second > r->second;	}};void  Sortmap(vector<map<string,int>::iterator>&  v,map<string,int>& Countmap){	map<string,int>::iterator it =Countmap.begin();	while(it!= Countmap.end())	{		v.push_back(it);//全部保存到vector中		++it;	}	sort(v.begin(),v.end(),Cmp());//排序}顯示結果:方法二·······我們可以使用堆來進行這個排序 ;;;;
void Sortmap(vector<map<string,int>::iterator>&  v,map<string,int>& Countmap){		map<string , int>::iterator it = Countmap.begin();	while(it!= Countmap.end())	{		v.push_back(it);//全部保存到vector中		++it;	}	vector<map<string,int>::iterator>::iterator it2 = v.end();	make_heap(v.begin(),it2,Cmp());//建一個堆	while(it2!= v.begin())	{		pop_heap(v.begin(),it2,Cmp());//每次將最小的節點給pop到尾部		--it2;	}	vector<map<string,int>::iterator> ::iterator it1 = v.begin();//打印輸出 	while(it1 != v.end())	{		cout<<(*it1)->first<<" ,"<<(*it1)->second<<endl;		it1++;	}}

使用三、、、、、、、、、、、

得到喜歡人數最多的三個水果、???其實這種做法更簡單了,,,,我們只需要將這些進行排序之后,然后取其前三個元素的數 
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 彩票| 芜湖县| 锦屏县| 肥城市| 涞源县| 滨海县| 北川| 车致| 周至县| 法库县| 壤塘县| 双柏县| 平顺县| 湖南省| 江津市| 庆安县| 永修县| 宁波市| 南投县| 深圳市| 上饶市| 呼伦贝尔市| 阿城市| 拉孜县| 揭东县| 都兰县| 长海县| 韶山市| 汉中市| 海口市| 手游| 奈曼旗| 资溪县| 运城市| 沈阳市| 历史| 肇源县| 姚安县| 乌鲁木齐市| 和政县| 土默特左旗|