//目录

优先队列(priority_queue)的cmp,POJ(2051)

sort()函数的cmp为函数,priority_queue的cmp为类,具体写法是:

struct Node {
      int i,j;
} node[200];

struct cmp {
    bool operator() (Node a,Node b) {
        if(a.i==b.i)
            return a.j<b.j;///j的升序
        return a.i<b.i;    ///i的升序
        }
};

priority_queue<Node,vector<Node>,cmp> re;

 

#include <iostream>
#include <queue>
using namespace std;

typedef struct {
    int id;///用户ID
    int time;///下一次出该出现的时间
    int period;///时间间隔
} Register;

///定义优先权队列的比较函数
struct cmp {
    bool operator()(Register a,Register b) {
        if(a.time==b.time)
            return a.id>b.id;///时间相等时按照id升序排列
        return a.time>b.time;///按照时间升序排列,成为最小堆
    }
};

int main() {
    ///定义优先权队列,到达时间最小的最先到,相等时按照id升序排列
    priority_queue<Register,vector<Register>,cmp > re;
    string cmd;///命令
    int id;///定义id
    int period;///定义时间间隔
    int count;///定义输出条数
    while(true) {
        cin>>cmd;
        if(cmd.compare("#")==0)break;
        cin>>id>>period;
        Register r;
        r.id = id;
        r.period = period;
        r.time = period;
        re.push(r);
    }
    cin>>count;
    while(count--) {
        Register reg = re.top();
        cout<<reg.id<<endl;
        reg.time += reg.period;
        re.pop();
        re.push(reg);
    }
    return 0;
}
View Code

 

posted @ 2016-05-11 20:35  小草的大树梦  阅读(1100)  评论(0编辑  收藏  举报