STL初步——团队队列

团队队列

1.使用的容器说明

队列queue:使用到了两个队列,一个团队队列,一个队员队列,队员队列为数组,元素为团队队列的编号,数组的下标为团队队列的编号,实现了队员队列的有序保存。
映射map:队员编号—>团队编号,实现了给定队员,可以找到其所属的团队。

2.源代码

//2020年3月30日21:14:36
//队列的使用
#include <iostream>
#include <map>
#include <queue>
#include <string>

using namespace std;

const int maxt = 1000 + 10;

int main()
{
	int t;//t为团队数量
	while (cin>>t &&  t)
	{
		//记录团队所有成员的编号
		map<int, int> team; //key为队员编号,value为团队编号
		for (int i = 0; i != t; i++){
			int n, x;//n表示一个团队的人数,x记录团队的每个队员的编号
			cin >> n;
			while (n--)
			{
				cin >> x;
				team[x] = i;
			}
		}

		//模拟入队
		queue<int> q, q2[maxt];//q表示团队队列,q2表示队员队列
		for (;;){
			int x;//x记录队员编号
			string cmd;//cmd记录命令
			if (cmd[0] == 'S')
			{
				break;
			}
			else if (cmd[0] == 'D'){
				int t = q.front();//获取出队队员所属于的团队
				cout << q2[t].front() << endl;
				q2[t].pop();
				//团队的队员为空,团队出队
				if (q2[t].empty())
				{
					q.pop();
				}
			}
			else if (cmd[0] == 'E'){
				cin >> x;
				int t = team[x];//获取队员x所属的团队
				//团队为空,则先让团队入队,再让队员入队
				if (q2[t].empty()){
					q.push(t);
				}
				q2[t].push(x);
			}

		}//!for
		cout << endl;
	}//!while
	return 0;
}

3.学习目标

1.学会队列的基本使用
2.学习队列数组的含义及使用
3.体会程序中映射map的使用
4.理解本程序设计的思路,不论入队还是出队,关键在于通过队员找到团队(映射map),先对团队是否入队判断,再对队员进行相应的入队出队操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值