思路:用队列queue存储set< pair< int,int > >型的数据(优先级,位置),另外将优先级存储到vector中用于进行优先级的对比。
#include<iostream>
#include<string>
#include<vector>
#include<queue>
#include <functional>
using namespace std;
typedef pair<int, int> point;
int main()
{
int Hlevel,i=1;//Hlevel优先级
queue<point>Printer;//point存储任务优先级和位置
vector<int>VHL;
while (!Printer.empty())
Printer.pop();
cout << "输入任务的优先级(q结束输入):\n";
cout << "任务#" << i << ": ";
while (cin >> Hlevel )
{
Printer.push(point(Hlevel, i));
VHL.push_back(Hlevel);//把优先级数据放入数组中存储
cout << "任务#" << ++i << ": ";
}
sort(VHL.begin(), VHL.end(),greater<int>());//把优先级从大到小排列
cin.clear(); cin.get();
cout << "输入想打印第几个任务的文件:";
int lo;
cin >> lo;
while (!Printer.empty())
{
point temp;
if (Printer.front().first == VHL.front())//如果队首的任务是最高优先级,则打印
{
if (Printer.front().second == lo)//打印了指定的任务
{
cout << "任务#" << Printer.front().second << "的文件被打印\n";
break;
}
cout << "任务#" << Printer.front().second << "的文件被打印\n";
Printer.pop();
VHL.erase(VHL.begin());
}
else if (Printer.front().first < VHL.front())//如果队首的任务不是最高优先级,则移到队尾
{
temp = Printer.front();//把队列任务储存到temp
Printer.pop();
Printer.push(temp);
}
}
}