日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

优先队列(priority_queue)的原理及用法

發布時間:2025/3/15 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 优先队列(priority_queue)的原理及用法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、優先隊列的原理及使用

std::priority_queue:在優先隊列中,優先級高的元素先出隊列,并非按照先進先出的要求,類似一個堆(heap)。其模板聲明帶有三個參數,priority_queue<Type, Container, Functional>, 其中Type為數據類型,Container為保存數據的容器,Functional為元素比較方式。Container必須是用數組實現的容器,比如 vector, deque. STL里面默認用的是vector. 比較方式默認用operator< , 所以如果把后面兩個參數缺省的話,優先隊列就是大頂堆,隊頭元素最大。

?

priority_queue(),默認按照從小到大排列。所以top()返回的是最大值而不是最小值!

使用greater<>后,數據從大到小排列,top()返回的就是最小值而不是最大值!

如果使用了第三個參數,那第二個參數不能省,用作保存數據的容器!!!!

priority_queue<int, greater<>> pq;//這是錯誤的 priority_queue<int,vector<int> , greater<>> pq;//這是對的

這里再提一嘴,greater<int>與greater<int>() 的區別,這要根據函數原型要求參數是函數對象類型還是要求參數是結構類型。greater<int> 對應于結構的類型,greater< int>()對應于沒有參數且返回類型更大的函數的類型。比如multimap中使用不帶括號的,sort使用帶括號的。

二、基本操作

優先隊列在頭文件#include <queue>中;

其聲明格式為:priority_queue <int> ans;//聲明一個名為ans的整形的優先隊列

基本操作有:

empty( ) ?//判斷一個隊列是否為空

pop( ) ?//刪除隊頂元素

push( ) ?//加入一個元素

size( ) ?//返回優先隊列中擁有的元素個數

top( ) ?//返回優先隊列的隊頂元素

優先隊列的時間復雜度為O(logn),n為隊列中元素的個數,其存取都需要時間。

三、使用方法

#include <bits/stdc++.h> using namespace std;int main() {vector<int> aa = { 1,2,4,3,8,6,1,4 };priority_queue<int, greater<>> pq;//, vector<int>for (int i = 0; i < aa.size(); i++) {pq.push(aa[i]);}sort(aa.begin(), aa.end());for (int i = 0; i < aa.size(); i++)cout << aa[i] << endl;for (int i = 0; i < aa.size(); i++){cout << pq.top() << endl;pq.pop(); }//cout << pq << endl;system("pause");return 0; }

?

總結

以上是生活随笔為你收集整理的优先队列(priority_queue)的原理及用法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。