使用tuple返回多个值

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<0>(store)<<" sales: "
                <<accumulate(get<1>(store),get<2>(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;
}
时间: 2024-08-08 21:52:03

使用tuple返回多个值的相关文章

java 一个函数EnumMap返回多个值

java 一个函数如何返回多个值 在开发过程中,经常会有这种情况,就是一个函数需要返回多个值,这是一个问题!! 网上这个问题的解决方法: 1.使用map返回值:这个方法问题是,你并不知道如何返回值的key是什么,只能通过doc或者通过源代码来查看. 2.传入一个引用进去,修改引用的属性值.问题:不实用. 3.通过泛型构造一个类似python的tuple类,或者构造一个JavaBean,其问题都是“一次性”,觉的不优雅. 个人解决方案: 使用EnumMap作为返回值类型,自己定义一个enum,将可

python- 如何return返回多个值

函数的return 语句只能返回一个值,可以是任何类型. 因此,我们可以“返回一个 tuple类型,来间接达到返回多个值 ”. 例:   x 除以 y 的余数与商的函数 def    F1 ( x, y ):          a = x % y          b = (x-a) / y          return ( a,b )     # 也可以写作 return a, b (c, d )= F1( 9, 4)        # 也可以写作 c , d = F1 ( 9, 4 ) p

java 一个函数如何返回多个值

在开发过程中,经常会有这种情况,就是一个函数需要返回多个值,这是一个问题!! 网上这个问题的解决方法: 1.使用map返回值:这个方法问题是,你并不知道如何返回值的key是什么,只能通过doc或者通过源代码来查看. 2.传入一个引用进去,修改引用的属性值.问题:不实用. 3.通过泛型构造一个类似python的tuple类,或者构造一个JavaBean,其问题都是"一次性",觉的不优雅. 个人解决方案: 使用EnumMap作为返回值类型,自己定义一个enum,将可能返回的属性名定义为en

C# 函数返回多个值的方法

有时候我们需要一个函数返回多个值,网上更多是用out实现,我个人很喜欢用tuple方法. tuple是一个元组,最多支持7个元素,再多需要嵌套等方法实现. 使用元组定义函数的方法如下: public static Tuple<string,string> TupleFun() { string[] T = {'hello','world'}; Tuple<string, string> tup = new Tuple<string, string>(T[0], T[2]

PHP自定义函数返回多个值

PHP自定义函数只允许用return语句返回一个值,当return执行以后,整个函数的运行就会终止. 有时要求函数返回多个值时,用return是不可以把值一个接一个地输出的. return语句可以返回任何类型的变量,这就是使自定义函数返回多个值的关键. 代码:  <?php function results($string) {      $result = array();      $result[] = $string;//原字符串     $result[] = strtoupper($

一个方法返回多个值

public class TwoTuple<A,B>{   public final A a; public final B b; public TwoTuple(A a,B b){ this.a=a; this.b=b; } } 这样我们可以通过new TwoTuple(A,B)返回两个值. 原文在<Java编程思想>第四版,泛型章节P335

Mybatis 插入数据后返回主键值

Oracle中获取刚刚插入记录的主键值: <insert id="insertSelective" parameterType="com.jxxx.p2pp.model.UUserInfo">     <selectKey resultType="java.math.BigDecimal" order="BEFORE" keyProperty="id">    SELECT U_US

jquery操作Ajax返回的JSON值

$.post( 'XXX.php', { col: value }, function(data) { var getData = eval( "(" + data + ")" ); //必须用括号,真蛋疼 alert( getData.xx ); } ); jquery操作Ajax返回的JSON值,布布扣,bubuko.com

在JS方法中返回多个值的三种方法

在使用JS编程中,有时需要在一个方法返回两个个或两个以上的数据,用下面的几种方法都可以实现: 1 使用数组的方式,如下: <html> <head> <title>JS函数返回多个值--oec2003</title> </head> <body> <input type="button" onclick="getNames()" value="test" /> &