欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

queue队列-printer queue

程序员文章站 2024-03-18 08:02:15
...

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;
}