admin管理员组

文章数量:1623791

优先队列 Heap

priority_queue<int, vector<int>, less<int>>s;//less表示按照递减(从大到小)的顺序插入元素
priority_queue<int, vector<int>, greater<int>>s;//greater表示按照递增(从小到大)的顺序插入元素

不写第三个参数或者写成less都是大根堆。greater是小根堆。

在C++中优先队列默认的是大根堆,如果用小根堆则加入greater.

定义方式

priority_queue<ListNode * , vector<ListNode *> ,Cmp> heap;

构造小根堆(重载)

1. 自定义结构重载

struct Cmp
    {
        bool operator()(ListNode * a, ListNode * b)
        {
            return a->val > b ->val; //小顶堆,,改为 < 是大顶堆
        }

    };
priority_queue<ListNode * , vector<ListNode *> ,Cmp> heap;

2. 重载 < >

如果是小根堆,就要重载 >
如果是大跟读, 就要重载 <

struct Node{
    int x,y,z;
    friend bool operator > (const Node& a,const Node& b){
        return a.x > b.x; //greater,小顶堆
    } 
    friend bool operator < (const Node& a,const Node& b){
        return a.x < b.x;//less,大顶堆 
    } 
}

配套例题

例题

本文标签: 算法常用priorityqueuestl