C++ STL——优先队列的结构体表示方法

优先队列是队列的一种,但是自身具有一定的排序功能,所以不具有队列“先进先出”的性质

刚刚接触优先队列,看过网上的用法后感觉还是太过于朦胧,所以打算自己写一个稍微细节一点的。

头文件

#include<queue>

常用操作

q.push() //放入元素
q.pop() //弹出元素
q.empty()//判断队列是否为空
q.top()//返回头部元素
q.size()//返回队列元素个数

声明方式

priority_queue<int>q;

默认的情况是大顶锥,及先输出的是元素较大的;

如:输入5个数字:1 2 3 4 5 则输出为: 5 4 3 2 1

priority_queue<int,vector<int>,less<int> >q1;
priority_queue<int,vector<int> ,greater<int> > q2;

上面两种为标准的创建方式,第一个元素为元素类型,第二个为承装元素的容器,第三个为排列方式。

其中,用less<int> 作为排序方式,则输出为从大到小;

用greater<int>作位排序方式,则输出为从小到大;

换句话说,less对应小根堆,greater对应大根堆。

#include<iostream>
#include<queue>
#include<vector>
using namespace std;
struct node
{
    int l,r;
    inline bool operator <(const node &a)const{
        return r<a.r;
    }
};
int main()
{
    priority_queue<node>w;
    for(int i=1;i<=5;i++)
    {
        int m,n;
        scanf("%d%d",&m,&n);
        w.push((node){m,n});
    }
    while(!w.empty())
    {
        node s =w.top();
        w.pop();
        cout<<s.l<<" "<<s.r<<endl;;
    }
}

上面的代码就是今天主要的分享内容:构造结构体来重新定义比较先后及顺序。

struct node
{
    int l,r;
    inline bool operator <(const node &a)const{
        return r<a.r;
    }
};

 

结构题里面包含两个部分:第一是数据区域。第二部分就是重新定义比较级的代码

关键在于重新定义比较级的 return;

如果你需要返回上面两组数据中第一个较大的数,就需要 return l<a.l (这里注意是小于号,与重构比较基函数相反)

而需要返回两组数据中第二个比较大的数,就需要 return r<a.r 

同理,优先输出较小的数,和上面类似。

当然,也可以在里面按照自己的需要自己进行设计构造。

以上。

原文链接: https://www.cnblogs.com/wangqiqq/p/12258908.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    C++ STL——优先队列的结构体表示方法

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/326986

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月1日 下午4:04
下一篇 2023年3月1日 下午4:04

相关推荐