queue队列-printer queue
原创
©著作权归作者所有:来自51CTO博客作者DeathYmz的原创作品,请联系作者获取转载授权,否则将追究法律责任
queue和栈差不多就是普通操作有一些不一样;
stack:
push()入栈
top()出栈一个元素不删除-出栈元素为最后一个入栈元素
pop()出栈,删除
empty()判断非不非空
queue:
push()入队
front()取队列第一个入队的并不删除
pop()出队,删除
empty()判断非不非空
priority:
同队列操作一样只不过
出队front()——为top();
需要可以自己使用自定义方式比较优先级
例如:
实现个位数打的整数优先级反而小的优先队列,
priority_queue< int,vector< int >,cmp > q;
struct cmp{
bool operator() (const int a,const int b) const{
return a%10>b%10;
}
}
sort中也有这样的用法对struct的排序即使在结构体里面bool operator< (const pro &u ) const> {
return ;
}
poj 3125 printer queue
#include<iostream>
#include<cstdio>
#include<queue>
#include<string>
using namespace std;
struct node{
int id;
int va;
};
int main()
{
int t, n, m,a;
node w;
cin >> t;
while (t--&&cin >> n >> m)
{
queue<node>q;
priority_queue<int>p;
int time = 0;
for (int i = 0; i < n; i++)
{
cin >> a;
w.id = i;
w.va = a;
q.push(w);
p.push(a);//优先队列按照int从大到大小
}
while (!q.empty())
{
w = q.front();
q.pop();
int max = p.top();
if (w.id == m&&w.va == max)//是要打印的并且,是目前队列优先级最大
{
time++;
cout << time << endl;
break;
}
if (w.va == max)//只是优先级最大,打印并且弹出
{
p.pop();
time++;
}
else//放到打印队伍最后
q.push(w);
}
}
return 0;
}