描述
STL的map中存儲了字符串以及對應出現的次數,請分別根據字符串順序從小到大排序和出現次數從小到大排序。
部分代碼已經給出,請補充完整,提交時請勿包含已經給出的代碼。
int main() { map<string, int> sm; int n; cin>>n; while(n--) { string s; int x; cin>>s>>x; sm[s] = x; } SortOutput(sm); return 0; }
輸入
輸入數據第一行為正整數n,接下來包含n行,每行一個字符串和出現的次數。
所有字符串和次數均不相同。
輸出
分別按照字符串和出現次數排序,並輸出map中的鍵和值,每行一對。
樣例輸入
5
abc 1
bcd 3
cde 2
def 5
efg 4
樣例輸出
abc 1
bcd 3
cde 2
def 5
efg 4
abc 1
cde 2
bcd 3
efg 4
def 5
今天做訓練賽的時候知道一道題要用map,就是不會,回來仔細學了map,它的鍵-值對應的關系方便解決一對一的數據,很是nice
#include <string> #include <iostream> #include <vector> #include <map> #include<algorithm> using namespace std; void SortOutput(map<string,int>&sm) { map<string,int >::iterator it; vector<int> v; for(it=sm.begin();it!=sm.end();++it) { cout<<it->first<<" "<<it->second<<endl;//map內部默認升序排序,不能用sort v.push_back(it->second); } sort(v.begin(),v.end(),less<int>());//默認降序,升序用greater<int>(); int n; for(int i=0;i<v.size();i++) { map<string,int>::iterator it; for(it=sm.begin();it!=sm.end();it++) { if(v[i]==it->second) { cout<<it->first<<" "<<it->second<<endl;//it->first訪問鍵,it->second訪問值 } } } } int main() { map<string, int> sm; int n; cin>>n; while(n--) { string s; int x; cin>>s>>x; sm[s] = x; } SortOutput(sm); return 0; }