692. 前K个高频单词 - 力扣(LeetCode)
//#include<set>
class Solution {
public:
//仿函数
struct compare
{
bool operator()(const pair<string,int>& kv1,const pair<string,int>& kv2)
{
return kv1.second > kv2.second;
}
};
vector<string> topKFrequent(vector<string>& words, int k) {
//插入(在插入过程中,已经按照字典序排好序了)
map<string,int> count_map;
for(auto e : words)
{
count_map[e]++;
}
//排序
vector<pair<string,int>> v(count_map.begin(),count_map.end());
stable_sort(v.begin(),v.end(),compare());
//拿到前K个
vector<string> ret;
for(int i = 0; i<k; ++i)
{
ret.push_back(v[i].first);
}
return ret;
}
};
单词识别_牛客题霸_牛客网 (nowcoder.com)
#include <algorithm>
#include <cctype>
#include <iostream>
#include<map>
#include<string>
#include<vector>
#include <sstream>
using namespace std;
struct compare
{
bool operator()(const pair<string,int>& kv1 ,const pair<string,int>& kv2)
{
return kv1.second > kv2.second;
}
};
int main() {
string s;
getline(std::cin,s,'.');
//变小字母
for(auto& c : s)
{
c = tolower(c);
}
map<string,int> count_map;
istringstream iss(s);
string word;
//插入单词并计数
while(iss >> word)
{
count_map[word]++;
}
//放入vecotr
vector<pair<string,int>> v(count_map.begin(),count_map.end());
//按照统计次数进行降序
stable_sort(v.begin(), v.end(),compare());
//输出
for(auto e : v)
{
cout<<e.first<<":"<<e.second<<endl;
}
return 0;
}
// 64 位输出请用 printf("%lld")