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;

参考

http://www.cplusplus.com/reference/tuple/tie/

posted @ 2022-04-07 10:44  明明1109  阅读(694)  评论(0编辑  收藏  举报