C++ pair详解

pair

pair在cplusplus 与C++Primer中的介绍


在这里插入图片描述


首先可以看到pair是一个class template —类模板 pair也是一种模板类型
对 pair 的介绍是:

这个类将一对值耦合在一起,这些值可能是不同类型的(T1T2)。单个值可以通过其公共成员firstsecond访问。
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

  1. p.first 返回 p 中的 first 公有数据成员
  2. 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;
	else
		cout << "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;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值