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的主要内容,如果未能解决你的问题,请参考以下文章