C++中的優(yōu)先隊(duì)列

優(yōu)先隊(duì)列(priority queue)
普通的隊(duì)列是一種先進(jìn)先出的數(shù)據(jù)結(jié)構(gòu)墓怀,元素在隊(duì)列尾追加弹囚,而從隊(duì)列頭刪除。在優(yōu)先隊(duì)列中秒啦,元素被賦予優(yōu)先級(jí)熬粗。當(dāng)訪問(wèn)元素時(shí),具有最高優(yōu)先級(jí)的元素最先刪除余境。優(yōu)先隊(duì)列具有最高級(jí)先出 (largest-in驻呐,first-out)的行為特征。
STL中的優(yōu)先隊(duì)列-priorit_queue芳来,包含在頭文件”queue”中含末,可以使用具有默認(rèn)優(yōu)先級(jí)的已有數(shù)據(jù)結(jié)構(gòu);也可以再定義優(yōu)先隊(duì)列的時(shí)候傳入自定義的優(yōu)先級(jí)比較對(duì)象即舌;或者使用自定義對(duì)象(數(shù)據(jù)結(jié)構(gòu))佣盒,但是必須重載好< 操作符。

1顽聂、優(yōu)先隊(duì)列的常用操作

    q.empty()          如果隊(duì)列為空肥惭,則返回true,否則返回false

    q.size()           返回隊(duì)列中元素的個(gè)數(shù)

    q.pop()            刪除隊(duì)首元素紊搪,但不返回其值

    q.top()            返回具有最高優(yōu)先級(jí)的元素值蜜葱,但不刪除該元素

    q.push(item)       在基于優(yōu)先級(jí)的適當(dāng)位置插入新元素

其中q.top()為查找操作,在最小優(yōu)先隊(duì)列中搜索優(yōu)先權(quán)最小的元素耀石,在最大優(yōu)先隊(duì)列中搜索優(yōu)先權(quán)最大的元素牵囤。q.pop()為刪除該元素。優(yōu)先隊(duì)列插入和刪除元素的復(fù)雜度都是O(lgn)滞伟,所以速度很快揭鳞;另外,在優(yōu)先隊(duì)列中诗良,元素可以具有相同的優(yōu)先權(quán)汹桦。
priority_queue模板原型

priority_queue模板原型

template< class T ,class Sequence=vector<T> ,classCompare=less<typenameSequence::value_type> >class priority_queue;

2.優(yōu)先隊(duì)列常用定義和重載運(yùn)算符方法

1)、默認(rèn)優(yōu)先級(jí)

#include <queue>
using namespace std;

priority_queue<int> q; 

通過(guò)<操作符可知在整數(shù)中元素大的優(yōu)先級(jí)高鉴裹。

2)、傳入一個(gè)比較函數(shù),使用functional.h函數(shù)對(duì)象作為比較函數(shù)径荔。

#include <queue>
#include <functional>
using namespace std;

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

此時(shí)整數(shù)中元素小的優(yōu)先級(jí)高督禽。

3)、傳入比較結(jié)構(gòu)體总处,自定義優(yōu)先級(jí)

#include <queue>
using namespace std;

struct cmp{
    bool operator ()(int a,int b){    //通過(guò)傳入不同類(lèi)型來(lái)定義不同類(lèi)型優(yōu)先級(jí)
        return a>b;    //最小值優(yōu)先
    }
};
/**
struct cmp{
    bool operator ()(int a,int b){
        return a<b;    //最大值優(yōu)先
    }
};
**/


priority_queue<int, vector<int>, cmp > q;

4)狈惫、自定義數(shù)據(jù)結(jié)構(gòu),自定義優(yōu)先級(jí)

#include <queue>
using namespace std;

struct node {
    int priority;
    int value;
    friend bool operator < (const node &a, const node &b) {  
        return a.priority < b.priority;
    }
    /* 這樣寫(xiě)也可以
    bool operator < (const node &a) const {
        return priority < a.priority;
    }
    */

};
/**
因?yàn)闃?biāo)準(zhǔn)庫(kù)默認(rèn)使用元素類(lèi)型的<操作符來(lái)確定它們之間的優(yōu)先級(jí)關(guān)系鹦马。而且自定義類(lèi)型的<操作符與>操作符并無(wú)直接聯(lián)系胧谈,故會(huì)編譯不過(guò)。
struct node {
    int priority;
    int value;
    friend bool operator > (const node &a, const node &b) {   //錯(cuò)誤示范
        return a.priority > b.priority;  
    }
};
**/

priority_queue<node> q;
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末荸频,一起剝皮案震驚了整個(gè)濱河市菱肖,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌旭从,老刑警劉巖稳强,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異和悦,居然都是意外死亡退疫,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)鸽素,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)褒繁,“玉大人,你說(shuō)我怎么就攤上這事馍忽±教溃” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵舵匾,是天一觀的道長(zhǎng)俊抵。 經(jīng)常有香客問(wèn)我,道長(zhǎng)坐梯,這世上最難降的妖魔是什么徽诲? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮吵血,結(jié)果婚禮上谎替,老公的妹妹穿的比我還像新娘。我一直安慰自己蹋辅,他們只是感情好钱贯,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著侦另,像睡著了一般秩命。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上弃锐,一...
    開(kāi)封第一講書(shū)人閱讀 51,365評(píng)論 1 302
  • 那天霹菊,我揣著相機(jī)與錄音旋廷,去河邊找鬼。 笑死目尖,一個(gè)胖子當(dāng)著我的面吹牛熊镣,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播测蹲,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼扣甲,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼琉挖!你這毒婦竟也來(lái)了涣脚?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤矾麻,失蹤者是張志新(化名)和其女友劉穎芭梯,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體玖喘,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡累奈,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年急但,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了赠群。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片查描。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡冬三,死狀恐怖缘缚,靈堂內(nèi)的尸體忽然破棺而出桥滨,到底是詐尸還是另有隱情,我是刑警寧澤蒲每,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布邀杏,位于F島的核電站,受9級(jí)特大地震影響望蜡,放射性物質(zhì)發(fā)生泄漏拷恨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望兜挨。 院中可真熱鬧拌汇,春花似錦、人聲如沸噪舀。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)界逛。三九已至昆稿,卻和暖如春息拜,著一層夾襖步出監(jiān)牢的瞬間溉潭,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工喳瓣, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人赞别。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓畏陕,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親仿滔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理崎页,服務(wù)發(fā)現(xiàn)实昨,斷路器洞豁,智...
    卡卡羅2017閱讀 134,654評(píng)論 18 139
  • 如需轉(zhuǎn)載, 請(qǐng)咨詢作者, 并且注明出處.有任何問(wèn)題, 可以關(guān)注我的微博: coderwhy, 或者添加我的微信: ...
    coderwhy閱讀 9,844評(píng)論 9 43
  • http://liuxing.info/2017/06/30/Spring%20AMQP%E4%B8%AD%E6%...
    sherlock_6981閱讀 15,910評(píng)論 2 11
  • GCD調(diào)度隊(duì)列是執(zhí)行任務(wù)的強(qiáng)大工具。調(diào)度隊(duì)列允許您相對(duì)于調(diào)度者異步或者同步的執(zhí)行任意代碼塊曙咽。您能夠使用調(diào)度隊(duì)列來(lái)執(zhí)...
    坤坤同學(xué)閱讀 6,673評(píng)論 1 3
  • 自尊是個(gè)好東西例朱,因?yàn)樗屓硕帽Wo(hù)自己,也懂得謙讓?zhuān)屪约焊哂凶灾饔悴酢R?jiàn)過(guò)自尊心特別要強(qiáng)的人洒嗤,不允許別人對(duì)自己...
    家家有999本難念的經(jīng)閱讀 1,508評(píng)論 0 0