【发布时间】:2014-03-19 23:12:12
【问题描述】:
标准库中有一些函数,例如std::map::insert,它们返回一个std::pair。有时,将其填充对应于该对的一半的两个不同变量会很方便。有没有简单的方法可以做到这一点?
std::map<int,int>::iterator it;
bool b;
magic(it, b) = mymap.insert(std::make_pair(42, 1));
我在这里寻找magic。
【问题讨论】:
标准库中有一些函数,例如std::map::insert,它们返回一个std::pair。有时,将其填充对应于该对的一半的两个不同变量会很方便。有没有简单的方法可以做到这一点?
std::map<int,int>::iterator it;
bool b;
magic(it, b) = mymap.insert(std::make_pair(42, 1));
我在这里寻找magic。
【问题讨论】:
<tuple> 标头中的std::tie 是您想要的。
std::tie(it, b) = mymap.insert(std::make_pair(42, 1));
“magic”:)
注意:这是一个 C++11 特性。
【讨论】:
#include <tuple> 才能使用它。
在 C++17 中,您可以使用结构化绑定。 所以你不必先声明变量:
auto [it, b] = mymap.insert(std::make_pair(42, 1));
【讨论】:
在 C++03 中,你必须这样写:
std::pair< map<int, int>::iterator, bool > res = mymap.insert(std::make_pair(42, 1));
【讨论】:
pair 变量来保存pair 返回值。我正在寻找替代方案。
boost::tie。这只是“小魔法”:)