priority_queue+Windows Message Queue

本文分享了一道AC题目从多次尝试错误到最后成功的过程。强调了细节的重要性,并详细介绍了使用优先队列解决此问题的方法,包括自定义结构体的优先级比较等关键步骤。

好坑的一道题!!!wrong了三遍,才ac!
重要的时间说三遍,细节细节细节
题目链接
涉及的知识点:优先队列的插入,判空,输出,以及自定义结构体优先级(重点)
在看以下代码之前,还请自己做一遍,一定要注意时间和空间哦!!

#include<cstdio>
#include<iostream>
#include<queue>
using namespace std;
struct student
{
    char place[110];//一开始开到了10000,超空间了
    int x;
    int y;
    int id;
    friend bool operator < (student a,student b)
    {
        if(a.y==b.y) return a.id>b.id;
        else return a.y>b.y;//y小的在前;
    }
};
int main()
{
    char order[4];//一开始用的string,超时了
    priority_queue<student>s;
    int k=0;
    while(scanf("%s",order)!=EOF)
    {
        if(order[0]=='G')
        {
            if(s.empty())
                printf("EMPTY QUEUE!\n");
            else
            {
                printf("%s %d\n",s.top().place,s.top().x);
                s.pop();
            }

        }
        else if(order[0]=='P')
        {
            student note;
            scanf("%s%d%d",note.place,&note.x,&note.y);
            note.id=k++;
            s.push(note);
        }
    }
    return 0;
}

没有百度到为什么用string会超时的愿因,先记住吧,能用char 就用char吧!!
这里说一下对重载小于号进行一下解释:

//通过一个元素来确定关系;
struct student
{
    int y;
    friend bool operator < (student a,student b)
    {
   	return 	a.y>b.y;//y小的在前面;
   	//可以这样理解:
   	//【b】【a】
   	//b在a的前面,a.y>b.y时返回1,所以小的在前面;
	//return a.y<b.y;//y大的在前面;
    }
};
//通过两个元素来确定关系;
struct student
{
    int y;
    int id;
    friend bool operator < (student a,student b)
    {
        if(a.y==b.y) return a.id>b.id;//当y相同时,id小的在前面;
        else return a.y>b.y;//y小的在前;//y不同时,小的在前面;
    }
};

在STL里涉及到结构体时,有许多情况需要重载,上面介绍的重载小于号,还是冰山一角,自己还可以多多了解。

转载的一篇很好的文章

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值