學會使用map,對map中的元素進行排序
阿新 • • 發佈:2019-01-07
這是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; }