priority_queue的常見用法


priority_queue的常見用法

priority_queue是什么?

  • 優先隊列
  • 底層實現用堆來實現
  • 每次隊首的優先級最大

priority_queue的定義

引入頭文件

# include <queue>
using namespace std;

定義使用

priority_queue<typename> name;

容器內元素的訪問

只能通過top()函數來訪問隊首的元素

priority_queue<int> q;
q.push(4);
q.push(3);
q.push(2);
cout<<q.top()<<endl;//4

priority_queue常用函數解析

push()

使得元素x入隊,時間復雜度為o(logN)。

top()

獲取隊首的元素,時間復雜度為o(1)

pop()

pop()令隊首出隊,時間復雜度為o(logN)

empty()

檢測隊列是否為空,返回true,返回false

size()

返回隊列中的元素數量

priority_queue隊列優先級的設置

基本數據類型優先級的設置

對於基礎類型,一般是數字大的優先級高,對於字符,就是字典序越大,優先級越高。

priority_queue<int> q;
priority_queue<int,vector<int>,less<int>>;

兩種定義方式等價

  • vector 是承載堆的容器
  • less 是比較類,less 表示數字大優先級大,greater 表示數字大,優先級小

結構體優先級設置

重載小於號

例子

struct fruite{
    string name;
    string price;
};

價格高優先級高

設置友元函數,重載小於號<

struct fruite{
    string name;
    string price;
    friend bool operator <(fruite a,fruite b){
        return fruite.price<fruite.price;
    }
};

注意
只能重載小於號
如果"重載>"

 friend bool operator <(fruite a,fruite b){
        return fruite.price>fruite.price;
  }

創建比較結構體

struct fruite{
    string name;
    string price;
};

struct cmp{
    bool operator() (fruite a,fruite b){
        return a.price>b.price;
    }
};

priority_queue<fruite,vector<fruite>,cmp> q;

priority_queue的用途以及注意點

  • 解決貪心問題
  • 注意在使用top()之前要判空使用empty()


免責聲明!

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



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