tuple类型的单词查询例子
17.3 重写前面的TextQuery程序,使用tuple代替QueryResult类。
TextQuery.h
- #ifndef TEXTQUERY_H
- #define TEXTQUERY_H
- #include<iostream>
- #include<string>
- #include<fstream>
- #include<vector>
- #include<memory>
- #include<map>
- #include<set>
- #include<new>
- #include<tuple>
- #include"DebugDelete.h"
- using namespace std;
- class QueryResult;
- class TextQuery
- {
- public:
- using line_no=vector<string>::size_type;
- TextQuery(ifstream&);
- tuple<string,shared_ptr<set<TextQuery::line_no>>,shared_ptr<vector<string>>> query(const string&) const;
- ~TextQuery()
- {
- //DebugDelete()(new vector<string>);
- cout<<"destructing...."<<endl;
- }
- private:
- shared_ptr<vector<string>> file;
- map<string,shared_ptr<set<line_no>>> wm;
- };
- #endif // TEXTQUERY_H
TextQuery.cpp
- #include"TextQuery.h"
- #include<tuple>
- #include<sstream>
- TextQuery::TextQuery(ifstream& is):file(new vector<string>,DebugDelete())
- {
- string text;
- while(getline(is,text))
- {
- file->push_back(text);
- int n=file->size()-;
- string word;
- istringstream line(text);
- while(line>>word)
- {
- auto &lines=wm[word];
- if(!lines)
- lines.reset(new set<line_no>);
- lines->insert(n);
- }
- }
- }
- tuple<string,shared_ptr<set<TextQuery::line_no>>,shared_ptr<vector<string>>>
- TextQuery::query(const string& sought) const
- {
- static shared_ptr<set<line_no>> nodata(new set<line_no>);
- auto loc=wm.find(sought);
- if(loc!=wm.end())
- return make_tuple(sought,loc->second,file);
- else
- return make_tuple(sought,nodata,file);
- }
main.cpp
- /*
- * This file contains code from "C++ Primer, Fifth Edition", by Stanley B.
- * Lippman, Josee Lajoie, and Barbara E. Moo, and is covered under the
- * copyright and warranty notices given in that book:
- *
- * "Copyright (c) 2013 by Objectwrite, Inc., Josee Lajoie, and Barbara E. Moo."
- *
- *
- * "The authors and publisher have taken care in the preparation of this book,
- * but make no expressed or implied warranty of any kind and assume no
- * responsibility for errors or omissions. No liability is assumed for
- * incidental or consequential damages in connection with or arising out of the
- * use of the information or programs contained herein."
- *
- * Permission is granted for this code to be used for educational purposes in
- * association with the book, given proper citation if and when posted or
- * reproduced.Any commercial use of this code requires the explicit written
- * permission of the publisher, Addison-Wesley Professional, a division of
- * Pearson Education, Inc. Send your request for permission, stating clearly
- * what code you would like to use, and in what specific way, to the following
- * address:
- *
- * Pearson Education, Inc.
- * Rights and Permissions Department
- * One Lake Street
- * Upper Saddle River, NJ 07458
- * Fax: (201) 236-3290
- */
- #include <string>
- using std::string;
- #include <fstream>
- using std::ifstream;
- #include <iostream>
- using std::cin; using std::cout; using std::cerr;
- using std::endl;
- #include <cstdlib> // for EXIT_FAILURE
- #include "TextQuery.h"
- #include<tuple>
- ostream &print(ostream &os,const tuple<string,shared_ptr<set<TextQuery::line_no>>,shared_ptr<vector<string>>> &qr)
- {
- os<<get<>(qr)<<" occurs "<<get<>(qr)->size()<<" times "<<endl;
- for(auto num:*get<>(qr))
- os<<"\t(line "<<num+<<" ) "
- <<(*get<>(qr))[num]<<endl;
- return os;
- }
- void runQueries(ifstream &infile)
- {
- // infile is an ifstream that is the file we want to query
- TextQuery tq(infile); // store the file and build the query map
- // iterate with the user: prompt for a word to find and print results
- while (true) {
- cout << "enter word to look for, or q to quit: ";
- string s;
- // stop if we hit end-of-file on the input or if a 'q' is entered
- if (!(cin >> s) || s == "q") break;
- // run the query and print the results
- print(cout, tq.query(s)) << endl;
- }
- }
- // program takes single argument specifying the file to query
- int main(int argc, char **argv)
- {
- // open the file from which user will query words
- ifstream infile;
- // open returns void, so we use the comma operator XREF(commaOp)
- // to check the state of infile after the open
- if (argc < || !(infile.open(argv[]), infile)) {
- cerr << "No input file!" << endl;
- return EXIT_FAILURE;
- }
- runQueries(infile);
- return ;
- }
DebugDelete.h
- #include<iostream>
- #include<new>
- using namespace std;
- class DebugDelete
- {
- public:
- DebugDelete(ostream &s=cerr):os(s) {}
- template <typename T>
- void operator()(T *p) const
- {
- os<<"deleting shared_ptr "<<endl;
- delete p;
- }
- private:
- ostream &os;
- };
tuple类型的单词查询例子的更多相关文章
- mysql多表查询例子
[理解方式]先分别找出每个表中查询出来的结果,然后再将两个结果合并. create database test charset utf8 collate utf8_bin;use test;creat ...
- Tuple类型
Tuple类型类似的体现了C#中的匿名类型 var person=new { Name="Eric"; Age=18: } 调用: Console.writeline( perso ...
- [System.Net]模拟Web请求编写简易单词查询客户端
demo: 我就不上传了 前言 在实际生活中,网络请求的应用极其常见,比如使用浏览器,程序中我们还要调用webservice.那么浏览器是怎么请求网络资源的呢?不用它可以自己请求不? 答案是可以的. ...
- python学习第五天 List和tuple类型介绍及其List切片
List 和tuple: python提供一种类似C语言数组的类型,但是使用起来确是相当的简洁.那就讲讲这神奇的python中list 和tuple吧. List类型: 1.直接贴代码: L = [' ...
- Scala Tuple类型
Tuple可以作为集合存储不同类型的数据,初始化实例如下: val tuple = (1,3,3.14,"aa") val third = tuple._3 Tuple 下标访问从 ...
- Python实现单词查询&文件查找
最近学C++ Primer,做到第十二章有个习题.要求针对英文文本,对于用户想搜索的单词,打印出该单词在文本中出现的总次数,单词所出现行号及对应的行内容:单词在一行内出现多次,只打印该行一次.C++的 ...
- .net 4.0 中的特性总结(四):Tuple类型
Tuple是具有指定数量和顺序的值的一种数据结构.针对这种数据结构,.Net4.0中提供了一组Tuple类型,具体如下: Tuple Tuple<T> Tuple<T1, T ...
- 编写高质量代码改善C#程序的157个建议——建议26:使用匿名类型存储LINQ查询结果
建议26:使用匿名类型存储LINQ查询结果 从.NET3.0开始,C#开始支持一个新特性:匿名类型.匿名类型有var.赋值运算符和一个非空初始值(或以new开头的初始化项)组成.匿名类型有如下基本特性 ...
- Python之List和Tuple类型(入门3)
转载请标明出处: http://www.cnblogs.com/why168888/p/6407682.html 本文出自:[Edwin博客园] Python之List和Tuple类型 1. Pyth ...
随机推荐
- 根据WSDL生成代理类方式(2)
运行开发人员工具提示 输入命令行svcutil http://localhost:8080/Test/TestClassPort?wsdl
- QEvent整理归纳:140种类型,29个继承类,7个函数,3种事件来源
140种事件类型: QEvent::None QEvent::AccessibilityDescription QEvent::AccessibilityHelp QEvent::Accessibil ...
- 12.URL重写
为什么要URL重写?1.有利于SEO(搜索引擎优化),带参数的RUL权重较低.2.地址看起来更正规,推广uid. 如我们一般在访问网页是会带参数,http://aaa.com/view.htm?id= ...
- andriod系统裁剪心得
亲们,,有人做过 将android系统总内存减少,并保持系统的稳定运行 方面的么?...比如将512M的内存换成256M,系统依然稳定运行,, 我目前,从三个方面下手,,,1.删减系统中不需要使用的a ...
- 一起啃PRML - 1.2.2 Expectations and covariances 期望和协方差
一起啃PRML - 1.2.2 Expectations and covariances 期望和协方差 @copyright 转载请注明出处 http://www.cnblogs.com/chxer/ ...
- PySpark关于HDFS文件(目录)输入、数据格式的探讨
背景 平台HDFS数据存储规则是按照“数据集/天目录/小时目录/若干文件”进行的,其中数据集是依据产品线或业务划分的. 用户分析数据时,可能需要处理以下五个场景: (一)分析指定数据集.指 ...
- 昂贵的聘礼--POJ1062
昂贵的聘礼 Time Limit : 2000/1000ms (Java/Other) Memory Limit : 20000/10000K (Java/Other) Total Submiss ...
- 论在Repository中使用EF框架
最近在思考框架的事情,从Petshop的传统三层框架过渡到目前的DDD模式. 目前纠结的几个节点是: 1,EF这个ORM框架,有没有必要在 Repository 层封装一下,或者直接在 Service ...
- 整理:Google jQuery 引用地址大全和方法(转)
什么是google的js托管? 说的明白点,跟我们以往做法一样,只不过这时候的引用的js库是放在google服务器上的. 比如引用jquery,则使用路径 http://ajax.googleapi ...
- 关于 RecastNavigation 寻路结果异常的问题。
由于我们的项目采用的寻路解决方案是:客户端使用 unity 原生的寻路系统,服务器采用 RecastNavigation 系统,而服务器的寻路数据来自于从 unity 导出的,所以理论上两边的寻路结果 ...