初探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;
}
运行结果:
代码如下:
#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;
}
运行结果:
相关文章推荐
- 针对一个文件 统计其中的单词和字符数 找出文件中出现次数最多的单词数 将文件中出现的单词按频率进行排序并输出
- 统计一篇英文文件中,单词出现的次数,并按单词的长度进行排序
- scala统计一个文件夹下面所有文件的单词出现的总次数
- wc:统计一个文件里出现某个单词出现的次数
- 一个文件有N个单词,每行一个,其中一个单词出现的次数大于N/2,怎么样才能快速找出这个单词?
- 【代码】统计文件中,不同字符出现的次数(可排序,没有处理英文单词、数字和大小写)
- 练习2-4:编一个程序统计文件中特定单词出现的次数(要求使用string类的运算符==来查找单词)
- 练习2-4:编一个程序统计文件中特定单词出现的次数(要求使用string类的运算符==来查找单词) .
- 编写一个程序,统计给定文件中包含的每个单词出现的频率,并按单词表的顺序显示统计结果
- java实现读取一篇英文文章,统计其中每个单词出现的次数并排序输出
- 统计输出某个文件中每个单词出现的次数
- 任一个英文的纯文本文件,统计其中的单词出现的个数。
- 华为oj之字符统计(按出现次数由多到少的顺序进行输出)
- 一个简单的例子理解C++ map, 运用map统计单词出现的次数
- C++统计一个文件中每个数字字符(0~9)出现的次数
- Linux命令经典面试题:统计文件中出现次数最多的前10个单词
- 每天一个python小程序 004:任一个英文的纯文本文件,统计其中的单词出现的个数
- (使用STL自带的排序函数进行编程7.3.14)UVA 10062 Tell me the frequencies!(求一个字符出现的次数(包括字母和数字)&&按出现的次数降序)
- 0004题--任一个英文的纯文本文件,统计其中的单词出现的个数.