C++ 中的 std::pair 和 std::tuple

Posted liyuanbhu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ 中的 std::pair 和 std::tuple相关的知识,希望对你有一定的参考价值。

C++ 中的 std::pair 和 std::tuple

最近在看 C++ 11 的标准,发现了 std::pair 和 std::tuple。 感觉这两个非常有用。就在这里记录一下。

std::pair 出现的比较早,最早是出现在 STL 中。定义在头文件 utility 中。
std::tuple 可以说是 std::pair 的增强版本。在 C++11 中引入的。定义在头文件 tuple 中。
简单的说 std::pair 可以将两个不同类型的数据绑定成一个对象。std::tuple 可以将 N 个不同的数据绑定成一个对象。这两个类都是模板类。在没有 std::pair 之前,为了将两个变量绑定在一起,我们只能定义一个结构体。用这个结构体来存放这两个数据。有了 std::pair 我们就可以省掉定义结构体这一步了。 std::tuple 也是一样。
下面是使用 std::pair 的几个简单的例子:

#include<utility>
std::pair <int, float> f;  //空构造
f = std::make_pair(10, 20.9);  //赋值
std::pair <int, float> f1(100,5.8);  //赋值构造
std::vector<std::pair <int, float>> arr;  //嵌套使用
int i = f.first; //返回第一个值
float a = f.second;  //返回第二个值

我个人认为 std::pair 和 std::tuple 最大的用途是用在函数返回值。我们知道 C++ 的函数只能返回一个值。如果我们要返回多个值,传统的办法是定义一个结构体。通过返回结构体的方法来返回多个值。或者就是利用函数的参数传指针或者引用,用函数参数来传出结果。这两种方法都没有 std::pair 或者 std::tuple 方便。

这里还要提到 std::tie() 函数,这个函数可以临时将几个变量绑定成一个 std::tuple。下面是个例子:

#include <tuple>
std::tuple<int, double> foo_tuple()

// return 1, -1; // Error until N4387
// return std::tuple<int, int>1, -1; // Always works
 return std::make_tuple(1, -1); // Always works

std::pair<int , double > foo_pair()

    return std::make_pair(1, 2.0);


int main(int argc, char *argv[])


    int t1;
    double b1;
    std::tie(t1, b1) = foo_tuple();
    qDebug() << t1 << b1;
    std::tie(t1, b1) = foo_pair();
    qDebug() << t1 << b1;

从这个例子也能看出,std::pair 是一个特殊的 std::tuple。所以也可以用 std::tie。

以上是关于C++ 中的 std::pair 和 std::tuple的主要内容,如果未能解决你的问题,请参考以下文章

由于 std::pair 导致的 GCC (MoSync) 中的 C++ 构建错误

什么是 C++ std::pair 的 C# 模拟?

C++ std::pair<,> 是什么怎么用

C++ pair 和make_pair

C++ 错误在模板类中声明 std::pair

在地图中使用 unique_ptr 时 std::pair 中的已删除函数