C 中優先佇列的使用

2021-08-08 09:21:36 字數 1082 閱讀 1098

c++中的常用的stl包括vectorsetmapqueue等,queue型別即我們平常所說的先入先出的佇列,取出queue的頭元素使用front()方法。

c++的queue標頭檔案中同樣包括優先佇列,priority_queue,優先佇列中最先出列的不是最先入列的元素,而是優先順序最高的元素,在priority_queue中取頭元素的方法是pop()

對於自定義型別的優先佇列,必須指定元素的優先順序,這個優先順序不需要乙個確定的數字,只需要比較大小即可。優先佇列的宣告方法例如:priority_queue,cmp>

其中cmp可以定義乙個結構體,過載「()」運算子,下面是cmp的定義:

struct cmp

}

對於一些常見的優先佇列,stl提供了更為簡單的方法,例如越小的整數優先順序越大:priority_queue,greater> pq

注意最後兩個》寫在一起會引起編譯器報錯,誤認為是》運算子

考慮下面這道題:

定義醜數:乙個正整數因數只含有,所以醜數序列如下:3,5,7,9,15,21…,求第k個醜數

這道題當然可以遍歷整數至所求,但顯然有很大的優化空間,如果使用優先佇列則會變得比較簡單,對於任意醜數x來說,3x,5x,7x同樣都是醜數,我們只要把從3,5,7開始計算的醜數放入優先佇列,再按小數優先的規則取出第k個數即可,具體實現如下

int uglynumber(int k);

pq.push(ugly[0]);

s.insert(ugly[0]);

int x=pq.top();

for(int i=0;ifor(int j=0;j<3;j++)

}x=pq.top();

pq.pop();

}return x;

}

C 優先佇列使用

優先佇列 priority queue 普通的佇列是一種先進先出的資料結構,元素在佇列尾追加,而從佇列頭刪除。在優先佇列中,元素被賦予優先順序。當訪問元素時,具有最高優先順序的元素最先刪除。優先佇列具有最高端先出 largest in,first out 的行為特徵。stl中的優先佇列 priori...

STL中優先佇列的使用

佇列的特點是先進先出。通常都把佇列比喻成排隊買東西,大家都很守秩序,先排隊的人就先買東西。但是優先佇列有所不同,它不遵循先進先出的規則,而是根據佇列中元素的優先權,優先權最大的先被取出。通常把優先佇列比喻成現實生活中的列印。乙個列印店裡有很多印表機,每台機器的效能不一樣,有的印表機列印很快,有的印表...

STL中優先佇列的使用

佇列的特點是先進先出。通常都把佇列比喻成排隊買東西,大家都很守秩序,先排隊的人就先買東西。但是優先佇列有所不同,它不遵循先進先出的規則,而是根據佇列中元素的優先權,優先權最大的先被取出。通常把優先佇列比喻成現實生活中的列印。乙個列印店裡有很多印表機,每台機器的效能不一樣,有的印表機列印很快,有的印表...