二叉堆对结构体使用优先队列

2013-11-20 14:24:09 · 作者: · 浏览: 139
    ZOJ 2724 Windows Message Queue(对结构体使用优先队列)
    /*
    * ZOJ_2724.cpp
    *
    *  Created on: 2013年11月7日
    *      Author: Administrator
    */
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <queue>
    using namespace std;
    struct MES {
    char str ;
    int mes;
    int p;
    int id;
    bool operator<( const MES& b)const {//特别要注意这种写法…
    if (p != b.p) {
    return p > b.p;
    }
    return id > b.id;
    }
    };
    int main() {
    char s[26];
    priority_queue<MES> q;//对结构体使用优先队列
    MES tmp;
    while (scanf("%s", s) != EOF) {
    int index = 0;
    if (strcmp(s, "PUT") == 0) {
    scanf("%s %d %d", tmp.str, &tmp.mes, &tmp.p);
    tmp.id = index++;
    q.push(tmp);
    } else {
    if (q.empty()) {
    printf("EMPTY QUEUE!\n");
    } else {
    tmp = q.top();
    q.pop();
    printf("%s %d\n", tmp.str, tmp.mes);
    }
    }
    }
    return 0;
    }