1.概念:什麼是優先佇列呢?在優先佇列中,元素被賦予優先順序,當訪問元素時,具有最高端優先順序的元素先被訪問。即優先佇列具有最高端先出的行為特徵。它可以說是佇列和排序的完美結合體,不僅可以儲存資料,還可以將這些資料按照我們設定的規則進行排序。
2.定義:優先佇列在標頭檔案#include 中;其宣告格式為:priority_queue ans;//宣告乙個名為ans的整形的優先佇列
3.支援的操作:
q.empty() //如果隊列為空,則返回true,否則返回false
q.size() //返回佇列中元素的個數
q.pop() //刪除隊首元素,但不返回其值
q.top() //返回具有最高優先順序的元素值,但不刪除該元素
q.push(item) //在基於優先順序的適當位置插入新元素
4例項:
優先佇列的時間複雜度為o(logn),n為佇列中元素的個數,其訪問都需要時間。
在預設的優先佇列中,優先順序最高的先出隊。預設的int型別的優先佇列中先出隊的為佇列中較大的數。
然而更多的情況下,我們是希望可以自定義其優先順序的,下面介紹定義優先順序的操作
priority_queue 對於基本型別的使用方法相對簡單。他的模板宣告帶有三個引數:
priority_queue其中type 為資料型別, container 為儲存資料的容器,functional 為元素比較方式。
container 必須是用陣列實現的容器,比如 vector, deque 但不能用 list.stl裡面預設用的是 vector.
1.比較方式預設用 operator< , 所以如果你把後面倆個引數預設的話,優先佇列就是大頂堆,隊頭元素最大。(也就是預設非公升序)
2.如果要用到小頂堆,則一般要把模板的三個引數都帶進去。
stl裡面定義了乙個仿函式 greater<>,對於基本型別可以用這個仿函式宣告小頂堆(非降序)
3.對於自定義型別,則必須自己過載 operator
4.自定義cmp
#include #include //小頂堆
5.自定義優先佇列
優先佇列詳解
在優先佇列中,優先順序高的元素優先出列,複雜度為log n empty true if the priority queue has no elements popremoves the top element of a priority queue push adds an element to ...
優先佇列詳解
優先佇列具有佇列的所有特性,包括基本操作,只是在這基礎上新增了內部的乙個排序,它本質是乙個堆實現的 定義 priority queue type 就是資料型別,container 就是容器型別 container必須是用陣列實現的容器,比如vector,deque等等,但不能用 list。stl裡面...
STL優先佇列詳解
優先佇列是一種抽象資料型別 abstract date type,adt 行為和佇列類似,但是先出隊的元素不是先進佇列的元素,而是佇列中優先順序最高的元素。stl的優先佇列定義在標頭檔案和 佇列一樣 用 priority queuepq 來宣告 最基本的用法 定義 priority queuepq ...