从元组函数一次存储 2 个变量

Posted

技术标签:

【中文标题】从元组函数一次存储 2 个变量【英文标题】:Storing 2 variables at once from a tuple function 【发布时间】: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++ 中是否有任何替代方法可以一次存储值。

【问题讨论】:

【参考方案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)。

以上是关于从元组函数一次存储 2 个变量的主要内容,如果未能解决你的问题,请参考以下文章

使用变量访问元组的值

在 Python 中将 MySQLdb 返回从元组转换为字符串

使用min函数从元组列表中获取多个元组

从元组生成元组

从元组列表中返回具有最小 y 值的元组

从元组列表中删除括号[重复]