【问题标题】:How to treat std::pair as two separate variables?如何将 std::pair 视为两个单独的变量?
【发布时间】: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

【问题讨论】:

    标签: c++ c++-standard-library


    【解决方案1】:

    &lt;tuple&gt; 标头中的std::tie 是您想要的。

    std::tie(it, b) = mymap.insert(std::make_pair(42, 1));
    

    magic”:)

    注意:这是一个 C++11 特性。

    【讨论】:

    • 另一个来自 C++11 的隐藏宝石!谢谢。请注意,您需要#include &lt;tuple&gt; 才能使用它。
    【解决方案2】:

    在 C++17 中,您可以使用结构化绑定。 所以你不必先声明变量:

    auto [it, b] = mymap.insert(std::make_pair(42, 1));
    

    【讨论】:

      【解决方案3】:

      在 C++03 中,你必须这样写:

      std::pair< map<int, int>::iterator, bool > res = mymap.insert(std::make_pair(42, 1));
      

      【讨论】:

      • 是的,很明显您可以创建一个pair 变量来保存pair 返回值。我正在寻找替代方案。
      • 在 C++03 中,可以使用boost::tie。这只是“小魔法”:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多