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來說就簡單的多了  ;;;;
               正確!!!!!!!!!!!這個方法比起方法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++;	}}使用三、、、、、、、、、、、
得到喜歡人數最多的三個水果、???其實這種做法更簡單了,,,,我們只需要將這些進行排序之后,然后取其前三個元素的數 
新聞熱點
疑難解答