17.4编写并测试findbook函数

#include<iostream>
#include<vector>
#include<string>
#include<tuple>
#include<algorithm>
#include"Sales_data.h"
using namespace std;
typedef tuple<vector<Sales_data>::size_type,vector<Sales_data>::const_iterator,vector<Sales_data>::const_iterator> matches; vector<matches> findbook(const vector<vector<Sales_data>> &files,const string &book)
{
vector<matches> ret;
for(auto it=files.begin();it!=files.end();++it)
{
auto found=equal_range(it->begin(),it->end(),book,compareIsbn);
if(found.first!=found.second)
ret.push_back(make_tuple(it-files.begin(),found.first,found.second));
}
return ret;
} void reportResult(istream &in,ostream &os,const vector<vector<Sales_data>> &files)
{
string s;
while(in>>s)
{
auto trans=findbook(files,s);
if(trans.empty())
{
cout<<s<<" not found in any stores "<<endl;
continue;
}
for(const auto &store:trans)
{
os<<"stores "<<get<>(store)<<" sales: "
<<accumulate(get<>(store),get<>(store),Sales_data(s))
<<endl;
}
}
} int main()
{ }

17.5重写findbook,令其返回一个pair,包含一个索引和一个迭代器pair。

typedef pair<vector<Sales_data>::size_type,pair<vector<Sales_data>::const_iterator,vector<Sales_data>::const_iterator>> match;
vector<match> findbook1(const vector<vector<Sales_data>> &files,const string &book)
{
vector<match> ret;
for(auto it=files.begin();it!=files.end();++it)
{
auto found=equal_range(it->begin(),it->end(),book,compareIsbn);
if(found.first!=found.second)
ret.push_back(make_pair(it-files.begin(),make_pair(found.first,found.second)));
}
return ret;
}

最新文章

  1. MVC路由配置例
  2. JQuery slidebox实现图片轮播
  3. Python成长笔记 - 基础篇 (十一)
  4. String详解, String和CharSequence区别, StringBuilder和StringBuffer的区别 (String系列之1)
  5. hg(Mercurial)版本库迁移到git版本库
  6. Swift属性
  7. 【转】Cocos2d-x 程序是如何开始运行与结束的
  8. linux中删除目录
  9. 使用jquery-mockjax模拟ajax请求做前台測试
  10. Model 验证
  11. Android 经验: 5555 端口会被 adb 误认为 emulator
  12. DIV+CSS 常见问题及解决办法整理
  13. Java数据结构之Set学习总结
  14. Octave Tutorial(《Machine Learning》)之第一课《数据表示和存储》
  15. NOI2009 二叉查找树 【区间dp】
  16. stack 的一些用法
  17. webpack3新特性简介
  18. 从零开始编写自己的JavaScript框架(二)
  19. LNMP环境下独立安装Mysql5.7.18 并对数据库文件进行本地物理迁移 (需暂停数据库服务方式)
  20. groovy普通方法、抽象方法、接口、trait

热门文章

  1. BZOJ 1641: [Usaco2007 Nov]Cow Hurdles 奶牛跨栏
  2. ZOJ 2562 More Divisors
  3. VS2010 C# 调用Web Service .
  4. Learning WCF Chapter2 Service Contracts
  5. MySQL5.6 基于db的并行复制
  6. BZOJ_1002_[FJOI2007]_轮状病毒_(递推+高精)
  7. 【Bower】
  8. (转载)C++中将构造函数或析构函数定义为private
  9. Linux之read用法
  10. List&lt;T&gt;的IndexOf方法和Remove方法