pair
std::pair主要的作用是将两个数据组合成一个数据,两个数据可以是同一类型或者不同类型。
C++标准程序库中凡是“必须返回两个值”的函数, 也都会利用pair对象。
class pair可以将两个值视为一个单元。容器类别map和multimap就是使用pairs来管理其健值/实值(key/value)的成对元素。
1.构造函数
-
pair<T1, T2> p1; //创建一个空的pair对象(使用默认构造),它的两个元素分别是T1和T2类型,采用值初始化。
-
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;