std::tie 简单应用:解压元组std::tuple
std::tie 介绍
std::tie是C++11以后引入的新特性,是一个函数模板,原型:
template<class... Types>
tuple<Types&...> tie (Types&... args) noexcept;
tie将其参数通过引用方式绑定到tuple的元素,常用来解压pair/tuple。如果想忽略其中的参数,可以配合使用std::ignore。
应用
向set插入(insert)数据后,返回的是一个pair:返回的pair中,first域是一个迭代器,指向insert进set的元素;second域是insert的bool类型结果(true or false);
在没有std::tie之前,如果想获取set::insert的结果,需要这样做:
set<string> s;
auto res = s.insert("A");
cout << *res.first << endl; // 打印A
cout << res.second << endl; // 打印1, 代表true
而有了std::tie之后,可以直接用一条语句将pair解压,并保存到各变量中:
set<string> s;
...
set<string>::const_iterator cit;
std::tie(cit, inserted) = s.insert("B");
cout << *cit << endl;
cout << inserted << endl;
这里cit类型太复杂,实际应用中可能并不关心其类型,也不需要关心指向的值。此时,可以用std::ignore来忽略该值。std::ignore是一个未指定的类型对象, 任何值都可以没有影响的赋值给它。
std::tie(std::ignore, inserted) = s.insert("B"); // 忽略insert返回的pair的first域
cout << inserted << endl;