时间限制: 1 Sec 内存限制: 128 MB
题目描述
编写一个程序,根据单词的出现频率降序打印出所输入的的各个单词。每个单词前标有它的计数值。
输入
各个单词,输入0则表示单词结束
输出
降序打印单词出现的频率和单词。单词频度相同,按出现顺序输出。
样例输入
bad
good
bad
cute
how
good
good
0
样例输出
3 good
2 bad
1 cute
1 how
提示
解决方案
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
struct Pair {
std::string string;
int count;
Pair(std::string &string, int count) : string(string), count(count) {}
};
bool operator==(Pair &pair, const std::string &string) {
return pair.string == string;
}
bool operator<(const Pair &lhs, const Pair &rhs) {
return lhs.count > rhs.count; // NG
}
int main() {
std::vector<Pair> vector;
std::string string;
std::cin >> string;
while (string != "0") {
std::vector<Pair>::iterator it = std::find(vector.begin(), vector.end(), string);
if (it != vector.end()) {
it->count += 1;
} else {
vector.push_back(Pair(string, 1));
}
std::cin >> string;
}
std::sort(vector.begin(), vector.end());
for (int i = 0; i < vector.size(); ++i) {
std::cout << vector[i].count << ' ' << vector[i].string << std::endl;
}
return 0;
}