c++ pair 、make_pair、tuple

pair

std::pair主要的作用是将两个数据组合成一个数据,两个数据可以是同一类型或者不同类型。
C++标准程序库中凡是“必须返回两个值”的函数, 也都会利用pair对象。
class pair可以将两个值视为一个单元。容器类别map和multimap就是使用pairs来管理其健值/实值(key/value)的成对元素。

1.构造函数

  1. pair<T1, T2> p1; //创建一个空的pair对象(使用默认构造),它的两个元素分别是T1和T2类型,采用值初始化。

  2. pair<T1, T2> p1(v1, v2);//创建一个pair对象,它的两个元素分别是T1和T2类型,其中first成员初始化为v1,second成员初始化为v2。

如: pair<string, int> name_age("Tom", 18);    //需要声明类型

2.pair对象的操作

访问两个元素操作可以通过first和sencond访问:

pair<int ,double> p1;

p1.first = 1;

p1.second = 2.5;

make_pair函数

template pair make_pair(T1 a, T2 b) { return pair(a, b); }

特点就是无需写出型别, 就可以生成一个pair对象。所以可以使用pair的构造函数也可以使用make_pair来生成我们需要的pair。

std::make_pair(42, '@');
而不必费力写成:
std::pair<int, char>(42, '@')

如: pair<int, double> p1(1,1.2);

     p1 = make_pair(1, 1.2);

延伸:在c++ 17 ,不需要特殊指定,直接可以推导出类型

pair p(1, 2.2); // c++17 自动推导

tuple

tuple是C++11新标准里的类型。它是一个类似pair类型的模板。pair类型是每个成员变量各自可以是任意类型,但是只能有俩个成员,而tuple与pair不同的是它可以有任意数量的成员。但是每个确定的tuple类型的成员数目是固定的。

和pair一样,可以通过构造函数和make_tuple进行定义初始化。

tuple<int,int,float> tp(1,2,3.1);

std::tuple<std::string, std::string, int> t2 = std::make_tuple("Caroline", "Wendy", 1992);

C++17就不需要特殊指定,直接可以推导出类型,代码如下:std::tuple eee(64, 128.0, "Caroline");

1. 访问元素使用"get<>()"方法, 注意get里面的位置信息, 必须是常量表达式(const expression);

如: cout<<"第一个元素为:"<<get<0>(tp)<<endl;

2.std::tuple_element<0, decltype(t)>::type获取元素类型;

如 std::tuple_element<1, decltype(t)>::type cnt = std::get<1>(t);

3.通过"std::tuple_size<decltype(t)>::value"获取元素数量

如:size_t num = std::tuple_size<decltype(t)>::value;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值