从元组函数一次存储 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 个变量的主要内容,如果未能解决你的问题,请参考以下文章