pair类型 这次遇到了,记录下来,方便彼此xue习
首先,这个pair类型是在头文件utility.h中。
一个piar保存两个数据成员,是用来生成特定类型的模板,当创建一个pair时,我们必须提供两个类型名,pair的数据成员将具有对应的类型,两个类型不要求一样:如下:
pair<string,string> anon;//保存两个string
pair<string,size_t> word_count;//保存一个string和一个size_t;
pair<string,vector<int>> line;//保存string和vector<int>
接下来我们为每个成员提供初始化器:
pair <string,string> author{"jm","joy"};
这条语句创建一个名为author的pair,两个成员被初始化为“jm”和“joy”。下面介绍pair上的操作:
pair<T1,T2> p;
这里p是一个pair型,两个类型分别为T1和T2的成员都进行了初始化。
pair<T1,T2> p(v1,v2);
p是一个成员类型为T1和T2的pair,first和second成员分别用v1和v2进行初始化;
pair<T1,T2>p={v1,v2};这个等价于p(v1,v2);
make_pair(v1,v2);返回一个用v1和v2初始化的pair。pair的类型从v1和v2的类型中推断出来。
p.first;返回p的名为first的公有数据成员
p.second;返回p的名为second的公有数据成员。
p1 relop p2 关系运算符(<,>,<=,>=)按字典序定义,例如,p1.first<p2.first或者!(p2.first<p1.first)&&p1.second<p2.second成立时
,p1<p2为true。关系运算符利用元素的<运算符来实现。
p1 == p2 ,p1!=p2,当first和second成员分别相等时,两个pair相等,相等性判断利用元素的==运算符进行实现。
创建pair对象的函数
如果有一个函数需要返回一个pair,在新标准下,我们可以对返回值进行列表初始化,如
pair<string,int>
process(vector<string> &v)
{
if(!v.empty())
return {v.back(),v.back().size()};//列表初始化
else
return pair<string,int>();//隐式构造函数返回值
}
此外还可以使用下面两种方法进行初始化列表返回
if(!v.empty())
return pair<string,int>(v.back(),v.back().size());
还可以用make_pair生成pair对象,
if(!v.empty())
return make_pair(v.bakc(),v.back().size());
谢谢!!