Query查询练习,使用map vector
来源:互联网 发布:数据分析技术服务合同 编辑:程序博客网 时间:2024/05/26 12:54
> File Name: Query.h
> Author:keson
> Mail:keson@bupt.edu.cn
> Created Time: 2014年11月05日 星期三 16时46分18秒
************************************************************************/
#ifndef _QUERY_H
#define _QUERY_H
#include<fstream>
#include<vector>
#include<string>
#include<sstream>
#include<map>
#include<set>
using namespace std;
class TextQuery
{
public:
TextQuery(std::ifstream &); //构造函数
TextQuery read(ifstream &file,TextQuery &item); //读输入文件
void print(); //打印读入的文件
void account(ifstream &file); //根据输入流将key值和value统计输入map
void query(string &s); //根据单词s打印出所在行
void map_print(); //打印map的key值
private:
vector<string> vec; //用来保存输入的每一行
map<string,set<int>> word_map; //每个单词作为key,行号的set集作为value
};
void TextQuery::map_print() //打印出现的单词
{
auto ret=word_map.begin();
while(ret!=word_map.cend())
{
cout<<ret->first<<" ";
++ret;
}
}
void TextQuery::query(string &s) //根据输入的单词s,打印出所在行
{
auto ret=word_map.find(s);
if(ret!=word_map.cend())
{
auto set_it=(ret->second).cbegin();
while(set_it!=(ret->second).cend())
{
cout<<*set_it<<" "<<vec[*set_it-1]<<endl;
++set_it;
}
}
else
cout<<"could't find";
}
void TextQuery::account(ifstream &file)
{
string fline,word;
int line_num=0;
while(getline(file,fline))
{
++line_num;
istringstream record(fline); //将一行绑定到record流,分解成单词
while(record>>word)
{
auto ret=word_map.find(word);
if (ret!=word_map.cend()) //若该单词已经在map的key值出现,则插入行号
{
ret->second.insert(line_num);
}
else //若未出现,则插入key和对应的value
{
set<int> val={line_num};
word_map.insert(make_pair(word,val));
}
}
}
}
void TextQuery::print() //打印出vec中的内容
{
for(auto c:vec)
cout<<c<<endl;
}
TextQuery TextQuery::read(std::ifstream &file,TextQuery &item)
{
string line;
if(file) //如果打开成功,读入每一行
{
while(getline(file,line))
{
(item.vec).push_back(line);
}
}
else
cerr<<"could't open";
file.close();
return item;
}
TextQuery::TextQuery(std::ifstream &file)
{
read(file,*this); //read读入初始化vec
map<string,set<int>> word_map;
}
#endif
/*************************************************************************
> File Name: Query.cpp
> Author:keson
> Mail:keson@bupt.edu.cn
> Created Time: 2014年11月05日 星期三 16时38分07秒
************************************************************************/
#include<iostream>
#include<fstream>
#include"Query.h"
using namespace std;
int main()
{
ifstream file("storyDataFile");
TextQuery item(file);
item.print();
file.close(); //关闭file流
ifstream file2("storyDataFile"); //重新打开那个文件
item.account(file2);
cout<<"Enter the word you want to find "<<endl;
string s;
cin>>s;
item.query(s);
// item.map_print();
return 0;
}
/*
void runQueries(ifstream &infile);
void runQueries(ifstream &infile)
{
//infile是一个ifstream,指向我们要处理的文件
Text tq(infile); //保存建立并打印结果
while(true)
{
cout<<"enter word to look for,or q to quit: ";
string s;
if(!(cin>>s)||s=="q") break;
print(cout,tq.query(s))<<endl;
}
}
*/
- Query查询练习,使用map vector
- hibernate使用Query进行查询
- vector map 多层嵌套使用
- nyoj 542 map vector使用
- map和vector嵌套使用
- vector map set的使用
- Hibernate的Query的setProperties(Map map)方法的使用
- 使用 EMF Query 查询 EMF 模型
- 使用 Microsoft Query查询外部数据
- 在Query中使用Or查询
- 使用query()方法进行模糊查询
- 慢查询与pt-query-digest使用
- 聊一聊laravel query builder 使用子查询
- C++中vector和map使用详解
- Map Vector Set (离散的使用)
- C++ vector和map的嵌套使用
- STL map/ unordered_map/ vector内存使用实验
- c++ STL vector map的使用
- startActivityForResult用法
- 与爱同行
- 采取枚举,form表单请求取值方法示例
- linux下so动态库一些不为人知的秘密(上)
- 通用ajax请求方法封装,兼容主流浏览器
- Query查询练习,使用map vector
- 【OC】Protocol
- hdu 5100 n*n棋盘放k*1长方条最多覆盖面积
- 开心的小明
- CentOS6.X下安装配置独立SVN服务器Subversion server
- Spring学习笔记
- zip压缩文件的设置密码问题,图片压缩
- POJ 2283 Different Digits
- jvm:eclipse.ini最佳优化实践