C STL優先佇列常用用法

2021-08-30 10:54:54 字數 4956 閱讀 4534

一、相關定義

優先佇列容器與佇列一樣,只能從隊尾插入元素,從隊首刪除元素。但是它有乙個特性,就是佇列中最大的元素總是位於隊首,所以出隊時,並非按照先進先出的原則進行,而是將當前佇列中最大的元素出隊。這點類似於給佇列裡的元素進行了由大到小的順序排序。元素的比較規則預設按元素值由大到小排序,可以過載「<」操作符來重新定義比較規則。

優先順序佇列可以用向量(vector)或雙向佇列(deque)來實現(注意list container不能用來實現queue,因為list的迭代器不是任意訪問iterator,而pop中用到堆排序時是要求randomaccess iterator 的!):

priority_queue, less> pq1;     // 使用遞增less函式物件排序

priority_queue, greater> pq2;   // 使用遞減greater函式物件排序

其成員函式有「判空(empty)」 、「尺寸(size)」 、「棧頂元素(top)」 、「壓棧(push)」 、「彈棧(pop)」等。

priority_queue,cmp>pq定義排序

struct cmp

};

structcmp2

};

//定義結構,使用運算子過載,自定義優先順序2

structnumber1

};

structnumber2

};

inta=;

number1 num1=;

number2 num2=;

intmain()

for(i=0;num1[i].x;i++)

que5.push(num1[i]);

for(i=0;num2[i].x;i++)

que6.push(num2[i]);

printf("採用預設優先關係:\n(priority_queueque;)\n");

printf("queue 0:\n");

while(!que.empty())

puts("");

puts("");

printf("採用結構體自定義優先順序方式一:\n(priority_queue,cmp>que;)\n");

printf("queue 1:\n");

while(!que1.empty())

puts("");

printf("queue 2:\n");

while(!que2.empty())

puts("");

puts("");

printf("採用標頭檔案\"functional\"內定義優先順序:\n(priority_queue,greater/less>que;)\n");

printf("queue 3:\n");

while(!que3.empty())

puts("");

printf("queue 4:\n");

while(!que4.empty())

puts("");

puts("");

printf("採用結構體自定義優先順序方式二:\n(priority_queueque)\n");

printf("queue 5:\n");

while(!que5.empty())

puts("");

printf("queue 6:\n");

while(!que6.empty())

puts("");

return0;

}

/*

執行結果 :

採用預設優先關係:

(priority_queueque;)

queue 0:

83 72 56 47 36 22 14 10  7  3

採用結構體自定義優先順序方式一:

(priority_queue,cmp>que;)

queue 1:

7 10 14 22 36 47 56 72 83 91

queue 2:

83 72 56 47 36 22 14 10  7  3

採用標頭檔案"functional"內定義優先順序:

(priority_queue,greater/less>que;)

queue 3:

7 10 14 22 36 47 56 72 83 91

queue 4:

83 72 56 47 36 22 14 10  7  3

採用結構體自定義優先順序方式二:

(priority_queueque)

queue 5:

7 10 14 22 36 47 56 72 83 91

queue 6:

83 72 56 47 36 22 14 10  7  3

*/

C STL優先佇列常用用法

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

C STL優先佇列常用用法

q.empty 如果隊列為空,則返回true,否則返回false q.size 返回佇列中元素的個數 q.pop 刪除隊首元素,但不返回其值 q.top 返回具有最高優先順序的元素值,但不刪除該元素 q.push item 在基於優先順序的適當位置插入新元素 template class t cla...

C STL優先佇列

q.empty 如果隊列為空,則返回true,否則返回false q.size 返回佇列中元素的個數 q.pop 刪除隊首元素,但不返回其值 q.top 返回具有最高優先順序的元素值,但不刪除該元素 q.push item 在基於優先順序的適當位置插入新元素template class t clas...