1. 程式人生 > >學會使用map,對map中的元素進行排序

學會使用map,對map中的元素進行排序

這是codeforces上面的一道A類水題,做這道題目有一個需要總結的地方,或者說我想到了一個很好的辦法,題目在這裡

題意是說,哪個字串出現的次數越多,則代表該字串對應的隊獲勝。我的想法是利用map統計字串出現的次數,每出現一次,字串(鍵)對應的值(value)加一,最後統計一下value最大對應的字串是哪一個,則可獲得哪一個隊獲勝。

這裡有一個問題是,如何對map中的元素按照value進行排序呢?

我記得有好多種方法可以實現,但是一時又想不起,現在只有一個想法是,構造一個pair型別的容器,把map中的每一個元素都存進vector中,然後利用vector進行排序就ok了。開始的時候我直接對map採用sort函式,編譯可以通過但執行時候則提示sort函式缺少引數,應輸入4個引數而我卻提供了3個引數,我也搞不懂到底是哪裡出現了問題,所以只有採用折中一下,在vector中排序則一切正常了。程式碼如下:

#include<iostream>
#include<utility>
#include<map>
#include<string>
#include<algorithm>
#include<vector>
using namespace std;
#define msi map<string,int> 
#define psi pair<string,int>
vector<psi> v;
msi m;
bool cmp(psi a, psi b)
{
	return a.second > b.second;
}
int main()
{
	int n, i;
	string s;
	cin >> n;
	for (i = 0; i < n; ++i)
	{
		cin >> s;
		m[s]++;
	}
	msi::iterator it;
	for (it = m.begin(); it != m.end(); ++it)
		v.push_back(make_pair(it->first, it->second));
	sort(v.begin(), v.end(), cmp);
	cout << v[0].first << endl;
	return 0;
}