题目描述
输入n组单词,统计不同单词出现的个数,并按照字典顺序输出。(n<1000,每个单词长度小于1000)
样例输入
4
aab
aab
aa
bc
样例输出
aa 1
aab 2
bc 1
#include <iostream>
#include <string>
#include <set>
#include <map>
using namespace std;
struct Word{
int times;
string wd;
};
struct Rule{
bool operator()(const Word &w1, const Word &w2){
return w1.wd<w2.wd;
}//按照字典序从小到大排序
};
int main(){
int n;
string s;
set<Word,Rule> st;//存放按照Rule排序的数组
map<string,int> mp;
cin>>n;
for(int i=0;i<n;i++){
cin>>s;
++ mp[s];
} ///输入单词,并记录出现次数;若是本身没有的单词,将会插入该单词,次数记为0;
/*while(cin>>s){
++ mp[s];
}*/
for(map<string,int>::iterator i=mp.begin() ; i!=mp.end(); ++i){//将mp中的单词按照Rule存入排序容器st
Word tmp;
tmp.wd=i->first;
tmp.times=i->second;
st.insert(tmp);
}
for(set<Word,Rule>::iterator i=st.begin();i!=st.end();++i)
cout<<i->wd<<" "<<i->times<<endl;
return 0;
}