優先權佇列

2021-09-06 14:28:41 字數 2290 閱讀 4836

佇列(queue)抽象體現了先進先出。fifo即 first in

first out的儲存和檢索策略。進入佇列的物件被放在尾部,下乙個被取出的元素取自佇列的首部。標準庫提供了兩種風格的佇列 fifo 佇列(稱作queue)以及priority_queue(優先順序佇列)。

priority_queue 允許使用者為佇列中包含的元素項建立優先順序,它沒有把新元素放在佇列尾部,而是放在比它優先順序低的元素前面。定義優先順序佇列的使用者決定怎樣確定優先順序。要使用這兩種佇列,必須包含相關的標頭檔案:#include

佇列和priority_queue 支援的全部操作見下表

priority_queue的元素被強加了順序關係,以便元素可以從大到小管理。這裡所謂最大即等價於擁有最高優先順序,預設情況下,元素的優先順序由底層元素型別相關的小於操作符執行。如果希望改寫預設的小於操作符,可以顯式地提供乙個函式或函式物件來排序優先順序佇列的元素。

優先佇列用法

在優先佇列中,優先順序高的元素先出佇列。

標準庫預設使用元素型別的

《操作符來確定它們之間的優先順序關係。

優先佇列的第一種用法,也是最常用的用法:

priority_queue

qi; 通過

《操作符可知在整數中元素大的優先順序高。

故示例1中輸出結果為:96

532第二種方法:

在示例1中,如果我們要把元素從小到大輸出怎麼辦呢?

這時我們可以傳入乙個比較函式,使用functional.h函式物件作為比較函式。

priority_queue

, greater >qi2; 其中

第二個引數為容器型別。

第二個引數為比較函式。

故示例2中輸出結果為:23

569第三種方法:

自定義優先順序。

struct

node

intpriority;

intvalue;};

在該結構中,value為值,priority為優先順序。

通過自定義operator

《操作符來比較元素中的優先順序。

在示例3中輸出結果為:

優先順序 值95

8261

2314

但如果結構定義如下:

struct

node

intpriority;

intvalue;};

則會編譯不過(g++編譯器)

因為標準庫預設使用元素型別的

《操作符來確定它們之間的優先順序關係。

而且自定義型別的

《操作符與》操作符並無直接聯絡,故會編譯不過。 //

**清單

#include#include

#include

using

namespace stdnamespace std;

struct

node

intpriority;

intvalue;

};int

main()

;

//示例1

priority_queueqi;

for(i = 0; i < len; i++)

qi.push(a[i]);

for(i = 0; i < len; i++)

cout

priority_queue, greater >qi2;

for(i = 0; i < len; i++)

qi2.push(a[i]);

for(i = 0; i < len; i++)

cout

priority_queueqn;

node b[len];

b[0].priority = 6; b[0].value = 1

; b[

1].priority = 9; b[1].value = 5

; b[

2].priority = 2; b[2].value = 3

; b[

3].priority = 8; b[3].value = 2

; b[

4].priority = 1; b[4].value = 4;

for(i = 0; i < len; i++)

qn.push(b[i]);

cout

<<"

優先順序"

<<'\t'

<<"值"

return

0;

CSS的優先權

css2.1 中規定了關於css 規則specificity 特異性 的計算方式,用乙個四位的數字串 注 css2 中是用三位 來表示,最後以specificity 的高低判斷css 的優先權。specificity 具體的計算規則 元素的style 樣式屬性,加1,0,0,0。每個id 選擇符 i...

優先權排程演算法

include include include include includeusing namespace std define maxn 100 int time 0 定義時間,為全域性變數,第乙個程序到達時為0 typedef structproducer 程序結構體 float rep pr...

CSS樣式優先權

當同乙個 html 元素被不止乙個樣式定義時,會使用哪個樣式呢?一般而言,所有的樣式會根據下面的規則層疊於乙個新的虛擬樣式表中,其中數字 1擁有最高的優先權。1.內聯樣式 在 html 元素內部 2.內部樣式表 位於 標籤內部 3.外部樣式表 4.瀏覽器預設設定 因此,內聯樣式 在 html 元素內...