关于队列中使用pair的总结

今天在学到广度优先搜索时,学长给我们提到大部分广度优先搜索都会用到队列(queue),而在使用queue时有两种方法来给队列赋多个值,一个是自写结构体,另一个就是使用pair。

pair是将2个数据组合成一个数据,当需要这样的需求时就可以使用pair。就像STL中的map就是将key和value放在一起来保存。同样的,当一个函数需要返回2个数据的时候,可以选择pair。pair会将两个数据分别转换为first和second储存到pair定义的变量中。

拿广度优先搜索来举例,可以使用queue<pair<int,int> > q来定义一个队列,我们可以拿这个q.front().first来储存坐标x,用q.front().second来储存坐标y,然后进行递推。

queue<pair<int,int> > q;
//first指示x,second指示y

或者我们在利用队列表示两个数值的时候也可以用pair

queue<pair<int,int> > q;
//first指示层数,second指示次数

而在pair定义下可以以两种方式来向队列中存入数据

如借助make_pair()函数或者用{}来存入

q.push(make_pair(x,y));
q.push({x,y});//在c11中使用,建议使用第一种方法

另外当队列有多个数据时可以使用pair<pair<int,int>,pair<int,int>>,这样就可以存入四个或四个以上的数据了,建议当数据超过四个以后使用结构体。

queue<pair<pair<int,int>,int> >q;
//first指示坐标,second指示长度


typedef pair<int,int> PII;
//这里是简写
queue<pair<PII,PII> > q;
//first指示坐标,second指示转弯数和方向

而在访问队列中数据时就通过first与second来得到想要的数据

queue<pair<int,int> > q;
//first指示层数,second指示次数
//这个就很清楚了
int t=q.front().first;
int tt=q.front().second;
//存入数据时
q.push(make_pair(t,tt));

queue<pair<pair<int,int>,int> >q;
//first指示坐标,second指示长度
//这个first是以pair定义的一个结构所以可以存两个数
int x=q.front().first.first;
int y=q.front().first.second;
//储存坐标
int l=q.front().second;
//储存长度
//存入数据时
q.push(make_pair(make_pair(x,y),l));

typedef pair<int,int> PII;
queue<pair<PII,PII> > q;
//first指示坐标,second指示转弯数和方向
//这个就可以存四个数了

int x=q.front().first.first;
int y=q.front().first.second;
//储存坐标
int t=q.front().second.first;//拐弯数
int f=q.front().second.second;//方向
//存入数据时
q.push(make_pair(make_pair(x,y),make_pair(t,f)));

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

panjyash

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值