首页 > 其他 > 详细

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

时间:2016-05-11 21:35:34      阅读:244      评论:0      收藏:0      [点我收藏+]

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

 

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

原文:http://www.cnblogs.com/TreeDream/p/5483456.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!