map下统计单词出现的地方
来源:互联网 发布:灯光编程教学视频 编辑:程序博客网 时间:2024/05/01 13:05
在Accelerated C++中,找每个单词对应的行数,有如下函数:
// ex7.3--xref函数实现// 时间:2013-1-2 22:01:56#include <iostream>#include <vector>#include <string>#include <map>#include "split.h"using std::istream;using std::vector;using std::string;using std::map;// 查找指向输入中每一个单词的所有行map<string, vector<int> > xref(istream& in, vector<string> find_words(const string&) = split){ string line; int line_number = 0; map<string, vector<int> > ret; // 读取下一行 while (getline(in, line)) { ++line_number; // 行号加1 // 把输入行的分割成单词 vector<string> words = find_words(line); // 记住出现在当前行中的每一个单词 for (vector<string>::const_iterator it = words.begin(); it != words.end(); ++it) { ret[*it].push_back(line_number); } } return ret;}这有一个问题,就是当一个单词在同行上出现多次使,那么map里面的vector<int>就会记录多次,那么如何让程序检测多次出现在相同行单词只记录一次呢?
下面是这个程序才改进:可以用两种不同的方法,但显然,方法1的效率要高于方法2的:
方法1:
// 查找指向输入中每一个单词的所有行map<string, vector<int> > xref(istream& in, vector<string> find_words(const string&) = split){ string line; int line_number = 0; map<string, vector<int> > ret; // 读取下一行 while (getline(in, line)) { ++line_number; // 行号加1 // 把输入行的分割成单词 vector<string> words = find_words(line); // 记住出现在当前行中的每一个单词 for (vector<string>::const_iterator it = words.begin(); it != words.end(); ++it) { vector<string>::const_iterator it1 = words.begin(); for (; it1 != it; ++it1) { // 如果当前行有两个单词相同 if (*it1 == *it) { break; } } if (it1 == it) { // 如果*it和它前面的单词都不同 ret[*it].push_back(line_number); } } } return ret;}
方法2:
// 查找指向输入中每一个单词的所有行map<string, vector<int> > xref(istream& in, vector<string> find_words(const string&) = split){ string line; int line_number = 0; map<string, vector<int> > ret; // 读取下一行 while (getline(in, line)) { ++line_number; // 行号加1 // 把输入行的分割成单词 vector<string> words = find_words(line); // 记住出现在当前行中的每一个单词 for (vector<string>::const_iterator it = words.begin(); it != words.end(); ++it) { int flag = 0; // 标识同一行是否有相同单词 vector<string>::const_iterator it1 = words.begin(); for (; it1 != it; ++it1) { // 如果当前行有两个单词相同 if (*it1 == *it) { ++flag; } } if (0 == flag) { // 如果*it和它前面的单词都不同 ret[*it].push_back(line_number); } } } return ret;}
- map下统计单词出现的地方
- java map练习之统计单词出现的次数
- java map练习之统计单词出现的次数
- 一个简单的例子理解C++ map, 运用map统计单词出现的次数
- 统计单词中出现的单词数
- 统计单词出现的次数
- 统计单词出现的频度
- 统计单词出现的次数
- 统计单词出现的次数
- 统计单词出现的次数。
- 利用Map实现的统计每个输入字符串或则单词出现的次数
- JavaScript中模拟java的map键值统计一段英文中各个单词出现的次数
- [Java练习]利用map统计一句话中单词的出现次数
- map统计单词次数的练习
- 关联容器map应用-统计单词出现频率
- 统计单词出现个数(STL-map求解)
- 【AC自动机】统计单词出现个数-map版
- 统计单词频率-map
- JAVA数组对象排序维护
- Android---->Allapps加载流程详解【AndroidICS4.0——>Launcher系列五】
- Linq Expression 值得注意
- c++计时器
- QT 软键盘
- map下统计单词出现的地方
- 设计模式——34、观察者模式
- Gallery2中Menu的分析
- 苹果笔记本的Windows系统下的VMWARE安装Linux系统问题
- Android Linux Kernel 电源管理 Early Suspend(转)
- 简单的二分查找
- [实时web系列]实时web概览
- do...while(0)的妙用
- 总结2012,规划2013