这是一道优先队列的题目算法照着https://www.cnblogs.com/mfrbuaa/p/4468842.html敲的,在这个题目中,用printf,和scanf效率要比cin cout快三倍。
注意: bool operator <(const Message a) const, 括号中的const表示参数a对象不会被修改,最后的const表明调用函数对象不会被修改! 如果换成 bool operator <( Message a)编译会报错!
在修改优先级的时候,第二个参数比第一个小就是最小队列,反之则是最大队列。
#include <iostream>
#include <cstdio>
#include <queue>
#include <cstdlib>
#include <cstring>
using namespace std;
struct Message {
char name[200];
int data, priority;
bool operator <(const Message a) const{
return a.priority < priority;
}
};
int main() {
priority_queue<Message>q;
char command[200];
Message message;
while (cin >> command) {
if (strcmp(command, "GET") == 0) {
if (q.empty())cout << "EMPTY QUEUE!" << endl;
else {
cout << q.top().name << " " << q.top().data << endl;
q.pop();
}
}
if (strcmp(command, "PUT") == 0) {
cin >> message.name >> message.data >> message.priority;
q.push(message);
}
}
return 0;
}