優先佇列詳解 C

2021-09-25 22:19:30 字數 2407 閱讀 7445

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 ...