優先佇列
在佇列基礎上按優先順序順序進入佇列
0.標頭檔案#include
greater和less的優先順序比較(和自定義的作用一樣),在標頭檔案#include 裡
1.建立乙個優先順序佇列時有兩種申請方式:
priority_queueq或者priority_queue,greater>q,
第一種預設的東西比較多,比如底層的實現方式以及堆的性質;
第二種就說明的比較清晰了,第乙個引數是佇列中元素的型別;第二個就是佇列底層的實現方式,這裡是用vector實現的;第三個是堆的性質,greater對應小頂堆,less對應大頂堆,當然這兩個只能適用於一些基本型別,於是優先順序就是這些基本型別元素的大小。
如果遇到一些複雜的型別,比如結構體或類,那麼就要重新定義這個優先順序,於是便要過載bool operator(),或者過載<。
例如:宣告優先佇列 priority_queueq;//這是預設的優先順序順序
也可以直接對於結構體 priority_queueq[10];//其中struct node;
(node n;//宣告乙個結構體 再 p[b].push(n);//這一種直接將結構體壓入佇列中)
2.基本操作:
q.empty() 如果隊列為空,則返回true,否則返回false
q.size() 返回佇列中元素的個數
q.pop() 刪除隊首元素,但不返回其值
q.top() 返回具有最高優先順序的元素值,但不刪除該元素
q.push(item) 在基於優先順序的適當位置插入新元素
3.除了預設的優先順序,還可以自定義優先順序比較
過載《運算子,過載的是優先順序關係,理解一下這個:
struct node1
};struct node3
};
x>n.x; 和 n1.x>n2.x;一樣,表示的是,n1.x
就是過載 <
若a>b,表示小的優先順序高
若a理解!記住啊。。
有時候出現其他約束條件
struct node4
};struct node2
};//別的約數條件下,判斷優先順序
struct node4
};struct cmp2
for(int i=0; i<10; i++)
//列印
printf("採用預設優先順序順序:\npriority_queueque;\n");
while(!que.empty())
printf("\n\n採用結構體自定義優先順序方式一\npriority_queueque1;\n");
while(!que1.empty())
printf("\npriority_queueque2;\n");
while(!que2.empty())
printf("\n\n自定義優先順序方式一加一:\n");
while(!que33.empty())
printf("\n\n採用結構體自定義優先順序方式二 \npriority_queue,cmp1>que3;\n");
while(!que3.empty())
printf("\npriority_queue,cmp2>que4;\n");
while(!que4.empty())
printf("\n\n採用結構體自定義優先順序方式二加一\n採用標頭檔案/functional/內定義優先順序:\n(priority_queue,greatergreater>que5;\n");
while(!que5.empty())
printf("\n(priority_queue,greatergreater>que6;\n");
while(!que6.empty())
printf("\n");
/*採用預設優先順序順序:
priority_queueque;
91 83 56 47 36 22 14 10 7 3
採用結構體自定義優先順序方式一(推薦)
priority_queueque1;
3 7 10 14 22 36 47 56 83 91
priority_queueque2;
91 83 56 47 36 22 14 10 7 3
採用結構體自定義優先順序方式二
priority_queue,cmp1>que3;
3 7 10 14 22 36 47 56 83 91
priority_queue,cmp2>que4;
91 83 56 47 36 22 14 10 7 3
採用結構體自定義優先順序方式二加一
採用標頭檔案/functional/內定義優先順序:
(priority_queue,greatergreater>que5;
3 7 10 14 22 36 47 56 83 91
(priority_queue,greatergreater>que6;
91 83 56 47 36 22 14 10 7 3
*/return 0;
}
STL容器之優先佇列
優先順序佇列,以前刷題的時候用的比較熟,現在竟然我只能記得它的關鍵字是priority queue 太傷了 在一些定義了權重的地方這個資料結構是很有用的。先回顧佇列的定義 佇列 queue 維護了一組物件,進入佇列的物件被放置在尾部,下乙個被取出的元素則取自佇列的首部。priority queue特...
STL容器之優先佇列
參考 拼裝小火車 要學會如何定義最小優先佇列 最大優先佇列 對於自己定義的結構體,如何定義最小 最大優先佇列 核心 定義比較結構 struct cmp1 struct cmp2 自定義資料結構 struct number1 struct number2 priority queue que 採用預設...
STL容器 優先佇列priority queue
priority queue顧名思義,是乙個具有權值概念的queue,它和queue一樣允許加入新元素 移除舊元素等功能。由於這是乙個queue,所以只允許在底部加入元素,從頂部取出元素。但優先佇列帶有權值概念,其內的元素自動按照元素的權值排序。權值最高者排在最前面。stl的priority que...