priority_queue()大根堆和小根堆(二叉堆)


#include<iostream>
#include <queue>
using namespace std;
int main() 
{
    //對於基礎類型 默認是大頂堆
    priority_queue<int> a; 
    //等同於 priority_queue<int, vector<int>, less<int> > a;
    
    //             這里一定要有空格,不然成了右移運算符↓
    priority_queue<int, vector<int>, greater<int> > c;  //這樣就是小頂堆
    priority_queue<string> b;

    for (int i = 0; i < 5; i++) 
    {
        a.push(i);
        c.push(i);
    }
    while (!a.empty()) 
    {
        cout << a.top() << ' ';
        a.pop();
    } 
    cout << endl;

    while (!c.empty()) 
    {
        cout << c.top() << ' ';
        c.pop();
    }
    cout << endl;

    b.push("abc");
    b.push("abcd");
    b.push("cbd");
    while (!b.empty()) 
    {
        cout << b.top() << ' ';
        b.pop();
    } 
    cout << endl;
    return 0;
}

優先隊列實質就是堆實現的;

默認的定義優先隊列是大根堆,即父節點的值大於子節點的值。

 priority_queue<int> a; 
    //等同於 priority_queue<int, vector<int>, less<int> > a;
當然也可以定義小根堆:
priority_queue<int, vector<int>, greater<int> > c;  //這樣就是小頂堆
將pair加入到隊列中:
priority_queue<pair<int, int> > a;//先比較first 再比較second

對於優先隊列的操作;
top 訪問隊頭元素
empty 隊列是否為空
size 返回隊列內元素個數
push 插入元素到隊尾 (並排序)
emplace 原地構造一個元素並插入隊列
pop 彈出隊頭元素
swap 交換內容
只能從隊列后邊加入,從隊列前邊拿出,在遍歷的時候可以通過p.size()或者p.empty();
摘抄自自博客https://blog.csdn.net/weixin_36888577/article/details/79937886


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM