簡體   English   中英

基於較低值的stl優先級隊列優先

[英]stl priority queue based on lower value first

我對stl優先級隊列有問題。我想讓優先級隊列按升序排列,默認情況下按降序排列。是否有任何方法可以在優先級隊列中執行此操作。

構建stl優先級隊列的復雜性是什么?如果我在采用O(nlgn)的數組中使用快速排序,那么它的復雜性類似於使用優先級隊列?

請某人回答。高級thanx。

  1. priority_queue具有模板參數,這些參數指定容器類型和用於訂購的比較。 默認情況下,比較為less<T> 要獲得相反的順序,請使用priority_queue<T, vector<T>, greater<T>>

  2. 插入優先級隊列需要花費對數時間,因此構建N項目的隊列的復雜度為O(N logN) ,與構建和排序向量相同。 但是,一旦構建完成,插入優先級隊列仍然是對數的,而插入排序向量中則是線性的。

使用類型

priority_queue<T, vector<T>, greater<T> >

使用其他比較器作為std::priority_queue的第三個模板參數。

priority_queue是一個容器適配器,可用於您定義的任何序列。 插入的性能等於std::push_heap操作,並且需要對數時間。 因此,在完成所有插入操作后進行排序的復雜性並不相同。 如果您插入一個固定的數量,然后再處理隊列,則vector和單一sort可能會更有效。

您只需將值乘以-1就可以將其乘以-1,這樣它將以與實際默認順序不同的相反順序存儲...並在檢索數據以使其實際形式時再次將值乘以-1。

用可變類型替換T波紋管。 您將完成工作

priority_queue<T, vector<T>, greater<T> > PQ;

作為int類型變量的示例,您可以這樣編寫:

priority_queue<int, vector<int>, greater<int> > Q;

您可以使用比較器類/結構在優先級隊列中實現相同的目的。

class CompareHeight 
{ 
    public:
        bool operator()(int &p1, int &p2) 
        {
            return p1 > p2; 
        } 
};

現在將優先級隊列聲明為

priority_queue<int, vector<int>, CompareHeight> pq;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM