C++STL特殊容器priority_queue

在了解priority_queue(優先隊列)前,可以先去瞅瞅queue,下面是傳送門啦>——<

傳送門

priority_queue的基本性能

class priority_queue<>實現出一個queue,只不過其中的元素依照優先級被讀取。priority_queue的接口與queue非常相近,只不過在插入元素后priority_queue會自動為元素排序,默認排序是operator <形成降序排列,也就是說,隊首的元素默認是最大的元素,我們在彈出元素時,就會彈出最大的那個元素。值得注意的是,如果同時存在若干個數值最大的元素,我們無法確知究竟哪一個會入選。

priority_queue使用須知

1.包含頭文件

#include<queue>

2.在頭文件<queue>中,class?priority_queue 定義如下

namespace std
{template <typename T,typename Container = vector<T>typename Compare = less<typename Container::value_type>>class priority_queue;
}

第一個template參數是元素類型,帶有默認值的第二個template參數定義了priority_queue內部用來存放元素的容器,默認容器為vector,帶有默認值的第三個template參數定義出“用以查找下一個最高優先級元素”的排序準則,默認以operator<作為比較標準。

但實際上,你可以用任何sequence容器支持priority_queue,只要他們支持random-access iterator和front()、push_back()、pop_back()等操作就行。由于priority_queue用到了STL heap算法,所以容器必須支持random-access。

priority_queue核心操作

1.核心接口成員函數

push() //將一個元素放入priority_queue中
top()   //返回priority_queue的一個隊首元素,但是不刪除它
pop()  //刪除priority_queue的一個隊首元素,但是不返回它

2.建立一個升序排序準則的priority_queue

priority_queue<int,vector<int>,greater<int> >  pq;  //建立一個容器為vector名為 pq 的 priority_queue

3.priority_queue的具體操作

#include<iostream>
#include<queue>     //必不可少的頭文件們
using namespace std;
int main()
{//創建一個容器為string的優先隊列priority_queue<string>  pq1;//插入三個字符串pq1.push("AWSL");pq1.push("WSND");pq1.push("NMSL");//打印優先隊列cout << "priority_queue pq1:" << endl;cout << "now pq1.size is: ";cout << pq1.size() << endl;cout << "從隊首開始彈出pq1的元素" << endl;cout << pq1.top() << endl;pq1.pop();cout << pq1.top() << endl;pq1.pop();cout << pq1.top() << endl;pq1.pop();cout << "now pq1.size is: ";cout << pq1.size() << endl;cout << endl;//-----------------------------------//創建一個容器默認但是排序準則為升序的優先隊列priority_queue<int, vector<int>, greater<int> >  pq2;//插入三個數字pq2.push(4396);pq2.push(777);pq2.push(250);//打印優先隊列cout << "priority_queue pq2:" << endl;cout << "now pq2.size is: ";cout << pq2.size() << endl;cout << "從隊首開始彈出pq2的元素" << endl;cout << pq2.top() << endl;pq2.pop();cout << pq2.top() << endl;pq2.pop();cout << pq2.top() << endl;pq2.pop();cout << "now pq2.size is: ";cout << pq2.size() << endl;
}

本文留下了一個小bug,等待初學者自己去發現喲,嘻嘻嘻/*-*\

?

轉載于:https://www.cnblogs.com/cloudplankroader/p/10394252.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/387391.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/387391.shtml
英文地址,請注明出處:http://en.pswp.cn/news/387391.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

可用于多元正態的參數估計 及 均值向量和協差陣檢驗 的R語言函數總結

一、多元正態的參數估計 1.1 樣本均值 在R語言中&#xff0c;均值通常用函數mean()得到&#xff0c;但是mean()只能計算一維變量的樣本均值&#xff0c;在面對多元隨機變量的樣本時&#xff0c;假設我們以數據框的形式保存樣本&#xff0c;我們有以下方法可以得到樣本均值&…

30秒的PHP代碼片段-MATH

本文來自GitHub開源項目 點我跳轉 30秒的PHP代碼片段 精選的有用PHP片段集合&#xff0c;您可以在30秒或更短的時間內理解這些片段。數學函數 average 返回兩個或多個數字的平均值。 function average(...$items) { $count count($items); return $count 0 ? 0 : array_sum(…

Hive簡介

Hive最初是應Facebook每天產生的海量新興社會網絡數據進行管理和機器學習的需求而產生和發展的 是建立在Hadoop上的數據倉庫基礎架構 作為Hadoop的一個數據倉庫工具&#xff0c;Hive可以將結構化的數據文件映射為一張數據庫表&#xff0c;并提供簡單的SQL查詢功能 Hive作為數…

可用于 線性判別、聚類分析 的R語言函數總結

一、判別分析 判別分析是一種分類技術&#xff0c;其通過一個已知類別的“訓練樣本”來建立判別準則&#xff0c;并通過預測變量來為未知類別的數據進行分類。根據判別的模型分為線性判別和非線性判別&#xff0c;線性判別中根據判別準則又分為Fisher判別&#xff0c;Bayes判別…

Linux 環境下搭建 Jenkins(Hudson)平臺

安裝jenkins&#xff1a;安裝 jenkins 有兩種方式&#xff1a;安裝方式一&#xff1a; [java] view plaincopysudo java -jar jenkins.war –httpPort18080 –ajp13Port18009 但是很多時候我們是使用SSH方式到目標機器上的&#xff0c;放我們關閉SSH連接時&#xff0c;這個命…

Android APK 打包過程 MD

Markdown版本筆記我的GitHub首頁我的博客我的微信我的郵箱MyAndroidBlogsbaiqiantaobaiqiantaobqt20094baiqiantaosina.comAndroid APK 打包流程 MD 目錄 目錄APK 的打包流程整體流程資源的編譯和打包資源ID資源索引概況具體打包過程aapt階段aidl階段Java Compiler階段dex階段a…

可用于 主成分分析、R型因子分析、簡單相應分析 的R語言函數總結

一、主成分分析 主成分分析是多元統計分析的一種常用的降維方法&#xff0c;它以盡量少的信息損失&#xff0c;最大程度將變量個數減少&#xff0c;且彼此間互不相關。提取出來的新變量成為主成分&#xff0c;主成分是原始變量的線性組合。 1.1 KMO檢驗和Bartlett球形檢驗 在…

[國家集訓隊]墨墨的等式

Description 墨墨突然對等式很感興趣&#xff0c;他正在研究a1x1a2y2…anxnB存在非負整數解的條件&#xff0c;他要求你編寫一個程序&#xff0c;給定N、{an}、以及B的取值范圍&#xff0c;求出有多少B可以使等式存在非負整數解。 Input 輸入的第一行包含3個正整數&#xff0c;…

Storm簡介

Storm是實時流式數據處理框架&#xff0c;支持多種編程語言 應用案例&#xff1a; realtime analytics online machine learning continuous computation distributed RPC ETL 性能&#xff1a;a million tuples per second per node 可擴展、高容錯 結合消息隊列和數據庫…

持續集成之Jenkins安裝部署

安裝JDKJenkins是Java編寫的&#xff0c;所以需要先安裝JDK&#xff0c;這里采用yum安裝&#xff0c;如果對版本有需求&#xff0c;可以直接在Oracle官網下載JDK。 [rootlinux-node1 ~]# yum install -y java-1.8.0 安裝Jekins [rootlinux-node1 ~]# cd /etc/yum.repos.d/ […

2019/2/18 Python今日收獲

Python day15——032&#xff0c;033異常處理&#xff1a;你不可能總是對的 1. Python標準異常總結AssertionError斷言語句&#xff08;assert&#xff09;失敗AttributeError嘗試訪問未知的對象屬性EOFError用戶輸入文件末尾標志EOF&#xff08;Ctrld&#xff09;FloatingPoin…

Shell01

shell是一個命令解釋器&#xff0c;是操作系統的最外層。 把用戶的輸入解釋給操作系統&#xff0c;將操作系統的輸入結果返回給用戶。 硬件-->kernel-->shell-->外圍應用程序 shell腳本&#xff1a;將命令或語句寫入文件&#xff0c;進行操作系統管理。 shell腳本…

jenkins svn tomcat ant自動部署

Jenkins Jenkins是基于Java開發的一種持續集成工具&#xff0c;用于監控持續重復的工作&#xff0c;功能包括&#xff1a; 1、持續的軟件版本發布/測試項目。 2、監控外部調用執行的工作。 跟其他持續集成相比&#xff0c;它的主要優點有&#xff1a; 開源&#xff0c;即免…

Shell02

局部變量 1、普通字符串變量 變量名value 變量名value #單引號中不進行變量解析&#xff0c;原樣輸出&#xff0c;應用不多 變量名"value" #雙引號會解析變量 例&#xff1a; a1123 a2234 a3"345" echo "a1$a1" echo "a2$a2&quo…

553 mail from must equal authorized user解決方法

在配置發送郵件通知&#xff0c;驗證其正確性時&#xff0c;出現"553 mail from must equal authorized user"提示的錯誤&#xff1b; 原因在于沒有在"系統管理&#xff08;Manage Jenkins&#xff09;"的"系統設置&#xff08;Configure system&…

3.1 讀入一個參數

已知正方形的邊長&#xff0c;求出其面積。 輸入樣例&#xff1a; 1 2 3 4 輸出樣例&#xff1a; 1 4 9 16 #include<iostream> #include<fstream> using namespace std;int main() {ifstream cin("test.txt");//向OJ提交時&#xff0c;注釋此句i…

[Apple開發者帳戶幫助]八、管理檔案(2)創建臨時配置文件(iOS,tvOS,watchOS)...

創建臨時配置文件以在設備上運行您的應用程序而無需Xcode。在開始之前&#xff0c;您需要一個App ID&#xff0c;一個分發證書和多個注冊設備。 有關完整的臨時配置文件工作流程&#xff0c;請轉到Xcode幫助中的分發到已注冊設備&#xff08;iOS&#xff0c;tvOS&#xff0c;wa…

Ant Build.xml

題記&#xff1a;用 Eclipse 3 &#xff0b;Tomcat 5 做東東&#xff0c;用起來還是比較爽。但是調試時每次手動Deploy到Tomcat中&#xff0c;比較麻煩。今用Ant來完成之。 1。打開Eclipse&#xff0c;在項目的根路徑下建立builds.xml文件。 這個是Ant配置的關鍵。其內容如下&…

3.2 讀入兩個參數

計算兩個整數的差。 輸入樣例&#xff1a; 1 3 5 7 輸出樣例&#xff1a; -2 -2 #include<iostream> #include<fstream> using namespace std;int main() {ifstream cin("test.txt");//向OJ提交時&#xff0c;注釋此句int num1, num2;while (cin &g…

解決做好一個機器學習項目的3個問題

機器學習是目前人工智能最令人激動的研究方向之一。我們可能更關注機器學習算法的實現細節&#xff0c;沉浸于機器學習所需要的數學功底&#xff0c;但對于機器學習從業者來說&#xff0c;如何更好更快速的實現一個機器學習項目更值得關注。 正如吳恩達在《機器學習》這門課中所…