您的位置:首页 > 编程语言 > C语言/C++

初探map()——对一个文件进行统计其中各个单词出现的次数,并按次数从高到低的顺序进行排序

2017-04-05 21:17 931 查看
用上篇文章的排序方法可以很方便的实现这个功能

代码如下:

#include<iostream>
#include<vector>
#include<algorithm>
#include<map>
#include<string>
using namespace std;
typedef pair<string, int> PAIR;
struct CmpByKeyLength {
bool operator()(const string& k1, const string& k2) {
if (strcmp(k1.c_str(), k2.c_str()) == 1)
return true;
else return false;
}
};
bool cmpVal(const PAIR& A, const PAIR& B)
{
return A.second>B.second;
}

void solution(string str)
{
map<string, int, CmpByKeyLength> res;
string temp;
int p = 0, q = 0;
for (int i = 0; i<str.size(); i++)
{
while ((str[i] >= 'A'&&str[i] <= 'Z') || (str[i] >= 'a'&&str[i] <= 'z'))
{
temp += str[i];
i++;
}
if (temp.size()>0)
{
res[temp]++;
temp = "";
}
}

cout << "按key从大到小排序:" << endl;
map<string, int>::iterator kk;
for (kk = res.begin(); kk != res.end(); kk++)
cout << kk->first << " " << kk->second << endl;
cout << endl;

cout << "按value从大到小排序:" << endl;
vector<PAIR>result(res.begin(), res.end());
sort(result.begin(), result.end(), cmpVal);
vector<PAIR>::iterator vv;
for (vv = result.begin(); vv != result.end(); vv++)
{
cout << vv->first << " " << vv->second << endl;
}
}
int main()
{
string s = "a c b bbb   bbb apple e ccc rew aa a bbb apple c bbb apple  ss aa bbb";
solution(s);
return 0;
}

运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++ map
相关文章推荐