STL -最大最小堆 priority_queue


//添加頭文件
#include<queue> using namespace std;

最大堆實現:

優先輸出大數據
priority_queue<Type, Container, Functional> Type為數據類型, Container為保存數據的容器,Functional為元素比較方式。 如果不寫后兩個參數,那么容器默認用的是vector,比較方式默認用operator<,也就是優先隊列是大頂堆,隊頭元素最大。
#include<iostream>  
#include<queue>  
using namespace std;  
  
int main(){  
    priority_queue<int> p;  
    p.push(1);  
    p.push(2);  
    p.push(8);  
    p.push(5);  
    p.push(43);  
    for(int i=0;i<5;i++){  
        cout<<p.top()<<endl;  
        p.pop();  
    }  
    return 0;  
}  

最小堆實現:

    class CMyPair :public CVertex
    {
    public :
        CMyPair(CVertex *a, CVertex *b) {
            m_pair_a = a;
            m_pair_b = b;
            cost = 0;
        }
        ~CMyPair() {};
        double getCost() { return cost; }
        void setCost(double c) { cost = c; }
    protected:
        CVertex * m_pair_a;
        CVertex * m_pair_b;
        double cost;
    };
    struct cmp {
        bool operator()(CMyPair a, CMyPair b) {
            if (a.getCost()== b.getCost())  return a.getCost()>b.getCost();
            return a.getCost()>b.getCost();
        }
    };

priority_queue<CMyPair, vector<CMyPair>,cmp> heap;

常用函數:

入隊,如例:heap.push(x); 將x 接到隊列的末端。
出隊,如例:heap.pop(); 彈出隊列的第一個元素,注意,並不會返回被彈出元素的值。
訪問隊首元素,如例:heap.front(),即最早被壓入隊列的元素。
訪問隊尾元素,如例:heap.back(),即最后被壓入隊列的元素。
判斷隊列空,如例:heap.empty(),當隊列空時,返回true。
訪問隊列中的元素個數,如例:heap.size()

 


免責聲明!

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



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