pair
pair在cplusplus 与C++Primer中的介绍
首先可以看到pair是一个class template —类模板 pair也是一种模板类型。
对 pair 的介绍是:
这个类将一对值耦合在一起,这些值可能是不同类型的(T1和T2)。单个值可以通过其公共成员first和second访问。
pair是元组的一种特殊情况。
所谓的元组就是:元组是能够容纳元素集合的对象。每个元素可以是不同的类型。
头文件: <utility>
模板参数:
两个参数 :
1 T1 first 成员变量的类型
2.T2 second 成员变量的类型
注意 pair只是一个模板类型 因此其参数是两个参数的类型T1,T2;
成员变量
两个成员变量:
1.first pair对象中的第一个值
2.second pair对象中的第二个值
pair的常见操作
1.pair对象的创建与初始化
格式:pair<T1,T2> p1;
例:
#include<utility>
using namespace std;
int main()
{pair<int,int> p1;//创建一个空的pair对象 //两个元素分别是int 和int 类型//采用值初始化return 0;
}
这里的初始化是采用该类型的默认值进行初始化 比如 int 类型的默认初始值是0 而string 类型默认是一个空字符串:
2. pair对象成员变量的访问
使用 " . " 操作符对pair类对象 可以直接访问其数据成员 其成员都是公有的 分别命名为 first 和sccond
- p.first 返回 p 中的 first 公有数据成员
- p.first 返回 p 中的 fsecond 公有数据成员
pair<int, int> p1;pair<string, string> s1;cout << p1.first << " " << p1.second << endl;cout << "_" << s1.first <<"-"<< s1.second << endl;
默认初始化结果:
创建并初始化:
格式:pair<T1,T2> p1(v1,v2);
pair<int, int> p1(1,3);pair<string, string> s1("hello","world");cout << p1.first << " " << p1.second << endl;cout << "_" << s1.first <<"-"<< s1.second << endl;
注意这里的赋值初始化必须两个参数类型与模板参数类型相同,也就是v1的类型必须和T1相同 v2的类型必须和T2相同。
pair运算符:
1.赋值:" = "
除了上面的 pair<T1,T2> p1(v1,v2); 这样在创建时初始化也可以使用 “=” 进行赋值达到对成员 first second 的赋值;
int main()
{pair<int, int>p1;p1.first = 12;p1.second = 13;cout << p1.first <<" "<< p1.second << endl;return 0;
}
2.比较 " < "
// p1 < p2 两个 pair 对象之间的小于运算 比较的次序是
// 如果 p1.first<p2.first 或者
// (p1.first<p2.first)&&(p1.second<p2.second) 时 p1<p2 才返回true
int main()
{pair<int, int>p1(1, 0);pair<int, int>p2(1, 0);if (p1<p2)cout << "true" << endl;elsecout << "false" << endl;return 0;
}
3.判断是否相等 " == "
// 如果两个pair对象的first和second 成员依次相等 则这两个对象相等
// 该运算使用其元素 == 操作符
// if (p1 == p2)
// {
// cout << "true" << endl;
// }
4. Swap
可以交换两个 pair 对象的 first 和second 成员变量 但是前提是所交换的成员变量的类型必须相同
使用方法: p1.swap(p2);
int main()
{pair<int, string>p1(1, "hello");pair<int, string>p2(12,"world");p1.swap(p2);cout << p1.first << " " << p1.second << endl;cout << p2.first << " " << p2.second << endl;return 0;
}
make_pair 生成新的pair对象
除构造函数 标准库还定义了一个make_pair函数 由传递给他的两个实参生成一个新的pair对象 可如下使用该函数创建的pair对象,并赋值给已经存在的pair对象。
int main()
{pair<string, string> S;string s1, s2;cin >> s1 >> s2;{S = make_pair(s1, s2);//等价于//S = pair<string, string>(s1,s2);}cout << S.first << " "<<S.second << endl;return 0;
}
注意: 尽量传入的参数的类型与pair 对象的T1 T2 相同 或者经过一下的隐式类型转换 否则将不能完成赋值。
int main()
{pair<int,int> S;S = make_pair(10.3, 'a');//这里也是可以的 对<double,char> 隐式转换cout << S.first << " "<<S.second << endl;return 0;
}