【问题标题】:Storing 2 variables at once from a tuple function从元组函数一次存储 2 个变量
【发布时间】:2019-05-09 05:06:03
【问题描述】:

我有一个元组函数,它返回一个形式为

的元组
<node*,int>

有没有办法一次存储 2 个值而不创建另一个元组。我知道我们可以做到

n,score=tuplefunct(abc);

在 python 中。但是,如果我想在 c++ 中存储两个返回值而不创建另一个元组,我需要调用两次

n=get<0>(tuplefunct(abc);
score=get<1>(tuplefunct(abc));

在 c++ 中是否有任何替代方法可以一次存储值。

【问题讨论】:

    标签: c++ recursion return tuples


    【解决方案1】:

    您不需要调用该函数两次(请注意,不涉及“另一个元组”,该函数返回一个,这就是您使用的):

    auto x = tuplefunct(abc);
    auto n = get<0>(x);
    auto score = get<1>(x);
    

    如果你有可用的 C++17,你可以使用structured bindings

    auto [n,score] = tuplefunct(abc);
    

    或者要在没有 C++17 的情况下接近它,您可以使用 std::tie(从 C++11 开始):

    node* n;
    int score;
    std::tie(n,score) = tuplefunct(abc);
    

    【讨论】:

    • 我还要提一下使用std::tie作为:node* n; int score; std::tie(n, score) = tuplefunct(abc);,在C++17之前没有引入辅助变量x
    • @DanielLangr 我不得不承认,我只是通过阅读文档来回答,我对元组的经验相当低,谢谢你的提示
    • auto 应该适用于我的解决方案。但我对第三种解决方案很好奇。我可以使用std::tie(n,-score) 将分数存储为返回值的否定吗?
    • @JonBovi 有趣的问题,尽管tie 只是创建了一个左值引用元组,让您可以分配给实际变量。像所有事情一样,它是可能的,但不是没有一些额外的努力
    • @JonBoiv 不适用于std::tie。它会创建非常量左值引用,并且您不能将非常量左值引用绑定到右值 (-score)。
    猜你喜欢
    • 1970-01-01
    • 2012-07-10
    • 2011-07-18
    • 2021-08-14
    • 2022-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    相关资源
    最近更新 更多