关于优先队列

本文介绍了C++中的优先队列,包括大顶堆和小顶堆的使用。大顶堆默认元素从大到小排序,而小顶堆则相反。同时,文章展示了如何自定义结构体排序,通过定义结构体`st`和重载操作符`>`,实现以结构体成员`x`升序排序的优先队列。在示例中,将结构体实例推入优先队列并按顺序弹出,展示其工作原理。
摘要由CSDN通过智能技术生成

优先队列

优先队列有三个参数:type, container, function。
type 为数据类型

container 为保存数据的容器

functional 为元素比较方式

container 必须是用数组实现的容器,比如 vector, deque 但不能用 list。STL里面容器默认用的是 vector. 比较方式默认用 operator< 。

priority_queue< type, container, function >;

一.大顶堆和小顶堆

大顶堆:元素从大到小排序

priority_queue<int>q;//默认大顶堆
priority_queue<int, vector<int>, less<int>>q1;//还可以这样写大顶堆

小顶堆:元素从小到大

priority_queue<int, vector<int>, greater<int>>q2;//小顶堆

二.优先队列中结构体排序

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll inf = 0x3f3f3f3f3f3f3f3f;
struct st {
    int x;
    int y;
    st() {}
    st(int a, int b) {
        x = a;
        y = b;
    }
}p[2500];

bool operator >(const st& a, const st& b) {//结构体自定义排序,>对应优先队列中的greater,<对应优先队列中的less
    return a.x > b.x;//x升序排序
}
priority_queue<st, vector<st>, greater<st>>q3;//结构体排序

int main() {
    p[0].x = 1, p[0].y = 2;
    p[1].x = 2, p[1].y = 4;
    p[2].x = 3, p[2].y = 6;
    q3.push(p[0]);
    q3.push(p[1]);
    q3.push(p[2]);
    for (int i = 0; i < 3; i++) {
        int x = q3.top().y;
        cout << x << endl;
        q3.pop();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值