優先隊列priority_queue 用法詳解

轉載:
1.優先隊列priority_queue 用法詳解
2.STL系列之五 priority_queue 優先級隊列

優先隊列是隊列的一種,不過它可以按照自定義的一種方式(數據的優先級)來對隊列中的數據進行動態的排序

每次的push和pop操作,隊列都會動態的調整,以達到我們預期的方式來存儲。

例如:我們常用的操作就是對數據排序,優先隊列默認的是數據大的優先級高

所以我們無論按照什么順序push一堆數,最終在隊列里總是top出最大的元素。

用法:

示例:將元素5,3,2,4,6依次push到優先隊列中,print其輸出。

1。標準庫默認使用元素類型的<操作符來確定它們之間的優先級關系。

priority_queue pq;
通過<操作符可知在整數中元素大的優先級高。
故示例1中輸出結果為: 6 5 4 3 2

2。數據越小,優先級越高

priority_queue<int, vector<int>, greater<int> >pq; 

其中
第二個參數為容器類型。
第二個參數為比較函數。
故示例2中輸出結果為:2 3 4 5 6

3.自定義優先級,重載比較符號

重載默認的 < 符號

struct node
{friend bool operator< (node n1, node n2){return n1.priority < n2.priority;}int priority;int value;
};

這時,需要為每個元素自定義一個優先級。

注:重載>號會編譯出錯,因為標準庫默認使用元素類型的<操作符來確定它們之間的優先級關系。
而且自定義類型的<操作符與>操作符并無直接聯系

代碼:

#include<iostream>
#include<functional>
#include<queue>
using Namespace stdnamespace std;
struct node
{friend bool operator< (node n1, node n2){return n1.priority < n2.priority;}int priority;int value;
};
int main()
{const int len = 5;int i;int a[len] = {3,5,9,6,2};//示例1priority_queue<int> qi;for(i = 0; i < len; i++)qi.push(a[i]);for(i = 0; i < len; i++){cout<<qi.top()<<" ";qi.pop();}cout<<endl;//示例2priority_queue<int, vector<int>, greater<int> >qi2;for(i = 0; i < len; i++)qi2.push(a[i]);for(i = 0; i < len; i++){cout<<qi2.top()<<" ";qi2.pop();}cout<<endl;//示例3priority_queue<node> qn;node b[len];b[0].priority = 6; b[0].value = 1; b[1].priority = 9; b[1].value = 5; b[2].priority = 2; b[2].value = 3; b[3].priority = 8; b[3].value = 2; b[4].priority = 1; b[4].value = 4; for(i = 0; i < len; i++)qn.push(b[i]);cout<<"優先級"<<'\t'<<"值"<<endl;for(i = 0; i < len; i++){cout<<qn.top().priority<<'\t'<<qn.top().value<<endl;qn.pop();}return 0;
}

priority_queue函數列表
c.top() 返回隊列頭部數據
c.push(elem) 在隊列尾部增加elem數據
c.pop() 隊列頭部數據出隊
其它操作
c.empty() 判斷隊列是否為空
c.size()
返回隊列中數據的個數

可以看出priority_queue的函數列表與棧stack的函數列表是相同的。

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

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

相關文章

android自定義畫板,android 自定義控件 -- 畫板

如圖&#xff1a;package com.example.myview;import android.content.Context;import android.graphics.Canvas;import android.graphics.Color;import android.graphics.Paint;import android.graphics.Path;import android.graphics.Paint.Style;import android.util.Attrib…

postgreSQl pathman 用法語句總結

2019獨角獸企業重金招聘Python工程師標準>>> --新建主表 create table part_test(id int, info text, crt_time timestamp not null); --插入測試數據 insert into part_test select id,md5(random()::text),clock_timestamp() (id|| hour)::interval from generat…

Oracle查詢筆記

-- tanslate(str,from_str,to_str) -- 將str中的from_str替換成to_str select translate(hello,e,o) t from dual;-- instr(str,des_str) -- 可以實現like功能 select instr(hello,g),instr(hello,h),instr(hello,l) from dual; -- decode(value,s1,r1,s2,r2,default) -- 類似于…

全排列算法及實現

轉載&#xff1a; 1.http://blog.csdn.net/hackbuteer1/article/details/6657435 2.http://blog.sina.com.cn/s/blog_9f7ea4390101101u.html 3.http://www.slyar.com/blog/stl_next_permutation.html 4.http://www.cplusplus.com/reference/algorithm/next_permutation/ 5…

ssh配置文件詳解

配置“/etc/ssh/sshd_config”文件 “/etc/ssh/sshd_config”是OpenSSH的配置文件&#xff0c;允許設置選項改變這個daemon的運行。這個文件的每一行包含“關鍵詞&#xff0d;值”的匹配&#xff0c;其中“關鍵詞”是忽略大小寫的。下面列出來的是最重要的關鍵詞&#xff0…

EC+VO+SCOPE for ES3

詞法環境 詞法作用域 詞法作用域&#xff08;lexcical scope&#xff09;。即JavaScript變量的作用域是在定義時決定而不是執行時決定&#xff0c;也就是說詞法作用域取決于源碼。 詞法環境 用于定義特定變量和函數標識符在ECMAScript代碼的詞法嵌套結構上的關聯關系&#xff0…

你真的會寫二分檢索嗎?

轉載&#xff1a;http://blog.chinaunix.net/uid-1844931-id-3337784.html 前幾天在論壇上看到有統計說有80%的程序員不能夠寫對簡單的二分法。二分法不是很簡單的嗎&#xff1f; 這難道不是聳人聽聞&#xff1f; 其實&#xff0c;二分法真的不那么簡單&#xff0c;尤其是二…

android listview動態加載網絡圖片不顯示,Android Listview異步動態加載網絡圖片

Android Listview異步動態加載網絡圖片詳見&#xff1a; http://blog.sina.com.cn/s/blog_62186b460100zsvb.html標簽&#xff1a; Android SDK代碼片段(5)[代碼] (1)定義類MapListImageAndText管理ListViewItem中控件的內容01 package com.google.zxing.client.android.AsyncL…

C#-面向對象的多態思想 ---ShinePans

總結: 多態是面向對象的核心.---------能夠理解為一個方法,多種實現, 在這里能夠用虛方法,抽象類,接口能夠實現多態 1.首先利用接口來實現多態: 接口相當于"功能,"接口能夠實現多繼承,分為 顯式實現接口和隱式實現接口 keyword為interface格式: interface 接口名 { …

wxpy 0.1.2微信機器人 / 優雅的微信個人號API

微信機器人 / 優雅的微信個人號API&#xff0c;基于 itchat&#xff0c;全面優化接口&#xff0c;更有 Python 范兒。用來干啥一些常見的場景控制路由器、智能家居等具有開放接口的玩意兒跑腳本時自動把日志發送到你的微信加群主為好友&#xff0c;自動拉進群中跨號或跨群轉發消…

c++中try catch的用法

在c中&#xff0c;可以直接拋出異常之后自己進行捕捉處理&#xff0c;如&#xff1a;&#xff08;這樣就可以在任何自己得到不想要的結果的時候進行中斷&#xff0c;比如在進行數據庫事務操作的時候&#xff0c;如果某一個語句返回SQL_ERROR則直接拋出異常&#xff0c;在catch塊…

const in c and cpp

http://c-faq.com/ansi/constasconst.html 轉載于:https://www.cnblogs.com/invisible/p/3333575.html

android ndk調用出錯,由于Android-NDK應用程序的權限問題,為什么fopen在本地方法中失敗?...

errno 0;FILE *fp;fp fopen("jigar.txt","wb");if(fp NULL)__android_log_print(ANDROID_LOG_ERROR, APPNAME, "FOPEN FAIL with %d",errno);else__android_log_print(ANDROID_LOG_ERROR, APPNAME, "FOPEN pass ");它得到失敗&…

循環隊列

什么是隊列&#xff1f; 隊列(Queue)也是一種運算受限的線性表。它僅僅同意在表的一端進行插入&#xff0c;而在還有一端進行刪除。同意刪除的一端稱為隊頭(front)&#xff0c;同意插入的一端稱為隊尾(rear)。 FIFO原則 隊列具有先進先出原則&#xff0c;與棧的先進后出形成對照…

T(n) = 25T(n/5)+n^2的時間復雜度 計算方法

對于T(n) a*T(n/b)c*n^k;T(1) c 這樣的遞歸關系&#xff0c;有這樣的結論&#xff1a; if (a > b^k) T(n) O(n^(logb(a)));logb(a)b為底a的對數 if (a b^k) T(n) O(n^k*logn); if (a < b^k) T(n) O(n^k); a25; b 5 ; k2 ab^k 故T(n)O(n^k*logn)O(n^2*logn)…

android jar導出,Android項目導出jar包的小技巧

我們知道&#xff0c;可以通過如下設置將一個普通的Android工程轉換成Android Library工程設置前后工程變化如下使用Ant編譯時(通過android.bat update project 命令生成 build.xml)&#xff0c;普通的Android工程會生成apk文件&#xff0c;而Android Library工程只生成jar文件…

(五十九)iOS網絡基礎之UIWebView簡易瀏覽器實現

【UIWebView網絡瀏覽器】 通過webView的loadRequest方法可以發送請求顯示相應的網站&#xff0c;例如&#xff1a; NSURL *url [NSURL URLWithString:"http://m.baidu.com"];// 創建請求數據NSURLRequest *request [NSURLRequest requestWithURL:url];// 向服務器發…

無心插柳OR志在必得?阿里推“來往”的意圖

近年來&#xff0c;阿里巴巴在外圍的動作確實不少&#xff0c;投資新浪微博、投資陌陌&#xff0c;配合阿里自身的一些戰略調整&#xff0c;讓人覺得這家公司似乎正在經歷一場前所未有的“蛻變”。其實這也不難理解&#xff0c;在BAT三國演義中&#xff0c;任何一方都不能對其他…

wampserver的mysql啟動與環境變量設置

安裝好wampserver以后&#xff0c;mysql服務默認已經啟動了。但是直接在命令行里輸入"mysql"&#xff0c;系統會提示說 mysql 不是內部或外部命令&#xff0c;也不是可運行的程序或批處理文件。 這是因為沒有增加“mysql”環境變量,請跳到第3步閱讀。 如果之前已經安…

華為mate30怎么申請鴻蒙內測,華為新系統啟動內測,mate30系列嘗鮮,網友:羨慕...

原標題&#xff1a;華為新系統啟動內測&#xff0c;mate30系列嘗鮮&#xff0c;網友&#xff1a;羨慕一款手機是否好用&#xff0c;其實取決于兩個方面&#xff0c;一個是硬件&#xff0c;另一個則是軟件&#xff0c;大家在購機的時候往往最關注的就是硬件配置&#xff0c;因為…