C STL之優先佇列

2021-09-27 14:01:29 字數 1560 閱讀 3137

首先先講一下仿函式

可能你看了以後也還是不太明白它到底是幹什麼的,怎麼作用的,那麼我就來簡單講一下

仿函式就是帶有乙個或多個過載小括號的成員函式的乙個結構體或類,又叫做仿函式類

仿函式類既可以當函式用,又可以當結構體用,好處是這樣就可以通過傳遞模板類來給stl傳遞乙個你寫的函式

如下

#include using namespace std;

struct disp

以上所有寫法全是大根堆(top大),小根同理

然後注意!node裡那個成員函式必須寫const!!!

常成員函式與非常成員函式是不同的函式,內部實現用的是常成員函式!

友元函式的話就不需要擔心這個了,常還是非常只有成員函式有

再就是 如果寫 const node &的話會快很多,遇到卡時間的題會很有效,但是寫或不寫都不會涉及編譯bug

常成員函式的那個const一定不能缺!不能缺!

然後總有人會問,為啥less大根,來看下less和greater的內部**

/// one of the @link comparison_functors comparison functors@endlink.

templatestruct less : public binary_function<_tp, _tp, bool>

};/// one of the @link comparison_functors comparison functors@endlink.

templatestruct greater : public binary_function<_tp, _tp, bool>

};

怎麼說呢,舉個例子吧

比方說 a[5]=;

sort(a,a+5,less());

結果就是:1,2,3,4,5

對於佇列,queue也好,deque也好

下標小的是front(迭代器begin),下標大的是back(迭代器end)

對於priority_queue,top不是front,而是back,所以這東西和佇列沒啥關係,鬼知道名字怎麼起的

類似於stack,是在後端操作的

priority_queue按less從小到大排的話,後端就是大的,於是就是大根堆

講了這麼多大家大概已經徹底理解這個這個priority_queue是啥,大概如何實現的吧

最後就該講最簡單的部分了

priority_queueq;

q.push(x);//壓入堆頂

q.emplace(x);//壓入堆頂

q.empty();//是否空

q.size();//個數

q.swap(q2);//交換

q.top();//堆頂元素的引用

好,大概就這些,我覺得算是挺詳細的了,應該能對大家學習有很大幫助

C STL之優先佇列

cpp view plain copy struct cmp1 struct cmp2 struct node1 struct node2 priority queue q1 採用預設優先順序構造佇列 priority queue,vector int cmp1 q2 最小值優先 priority ...

C STL優先佇列

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

c stl之佇列 棧 與優先佇列

棧 棧是先入後出,後入先出 有push 和pop 兩種操作 使用時定義是stacks top 操作是取棧頂的元素 但是不去刪除 在集合計算機的問題中的一段code 解釋 if idcache.cout x return idcache x 是如若找到集合x就返回他的id 佇列 佇列是 先如先出的 就...