写一个c++代码 给一非空的单词列表,返回前 k 个出现次数最多的单词。 返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率,按字母顺序排序。 输入:第1行为k值,第2行单词列表,单词列表以end结尾,end不属于单词列表中的单词。
时间: 2024-02-03 14:14:17 浏览: 128
以下为实现该功能的C++代码:
```c++
#include <iostream>
#include <vector>
#include <unordered_map>
#include <algorithm>
using namespace std;
// 定义一个哈希表来记录每个单词出现的次数
unordered_map<string, int> wordCount;
// 自定义排序函数,用于将单词按照出现频率和字母顺序排序
bool cmp(const pair<string, int>& a, const pair<string, int>& b) {
if (a.second == b.second) {
return a.first < b.first;
} else {
return a.second > b.second;
}
}
int main() {
// 输入k和单词列表
int k;
cin >> k;
string word;
while (cin >> word && word != "end") {
++wordCount[word];
}
// 将单词按照出现频率和字母顺序排序
vector<pair<string, int>> wordVec(wordCount.begin(), wordCount.end());
sort(wordVec.begin(), wordVec.end(), cmp);
// 输出前k个出现次数最多的单词
for (int i = 0; i < k && i < wordVec.size(); ++i) {
cout << wordVec[i].first << " " << wordVec[i].second << endl;
}
return 0;
}
```
在上面的代码中,我们使用了unordered_map来记录每个单词出现的次数,然后将其转换为vector,并使用自定义的排序函数将单词按照出现频率和字母顺序排序。最后输出前k个出现次数最多的单词。
阅读全文