7-26 Windows消息队列 (25分)--优先队列

参考:

优先队列priority_queue 用法详解

7-26 Windows消息队列 (25分)

优先队列比较函数的三种写法

 

 

 

首先定义结构体node,用来存储消息的名字和优先级,而因为node之间不能直接进行比较,所以重载<使node之间能相互比较(不能对>进行重载因为标准库默认使用<来确定元素的优先级)。

结构体定义:

struct  node 
{
    char s[15];
    int n;
    bool operator < (const struct node& a)
    {
        return n>a.n;//从小到大排序
        //return n<a.n; 从大到小排序
    }
};
//或者
struct node
{
    char s[15];
    int n;
    bool operator < (struct node a, struct node b)
    {
        return a.n > b.n;
    }
};

优先队列定义与头文件:

#include <queue>

priority_queue<struct node> q;

代码:

//AC
#include <iostream>
#include <string>
#include <cstring>
#include <queue>
#include <cstdio>
using namespace std;
struct node
{
    char s[15];
    int n;
    bool operator <(const struct node &a) const {return n > a.n;}}t_node;   
//重载>号会编译出错,因为标准库默认使用元素类型的<操作符来确定它们之间的优先级关系。
//而且自定义类型的<操作符与>操作符并无直接联系
int main()
{ 
    int n;
    scanf("%d",&n);
    priority_queue<struct node> q;
    for(int i=0; i<n; i++)
    {
        char order[4]; 
        scanf("%s",order);
        if(order[0] == 'P')
        {
            scanf("%s%d",t_node.s,&t_node.n);//顺序不能反,题目中先输入字符串
            q.push(t_node); 
        }
        else
        {
            if(q.empty())
                printf("EMPTY QUEUE!\n");
            else
            {
                printf("%s\n",q.top().s);
                q.pop();
            }
        }
    }
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值