優先佇列(過載函式)

2021-09-10 06:29:58 字數 1613 閱讀 9344

優先佇列是stl中比較重要的乙個部分,用起來非常方便,在很多排序題中要比sort一遍一遍排序快很多,它能根據自己定義順序來進行排序。

主要的兩種表達形式(其實還有其他的,這裡就先列舉兩個):

第一種是用friend bool operator來寫;

#include#includeusing namespace std;

#includetypedef struct node

}point;

第二種是用bool operator來寫。

#include#includeusing namespace std;

#includetypedef struct node

}point;

要注意的是上面的兩種都是從小到大來排順序!!程式裡面的大於小於號返回的是相反的,大於號是從小到大排序,小於是從大到小排序,自己定義優先順序的時候一定要注意,跟其他地方的不太一樣,記住就好了。

下面來看幾道題

看病要排隊—hdu - 1873 

看病要排隊這個是地球人都知道的常識。 

不過經過細心的0068的觀察,他發現了醫院裡排隊還是有講究的。0068所去的醫院有三個醫生(汗,這麼少)同時看病。而看病的人病情有輕重,所以不能根據簡單的先來先服務的原則。所以醫院對每種病情規定了10種不同的優先順序。級別為10的優先權最高,級別為1的優先權最低。醫生在看病時,則會在他的隊伍裡面選擇乙個優先權最高的人進行診治。如果遇到兩個優先權一樣的病人的話,則選擇最早來排隊的病人。 

現在就請你幫助醫院模擬這個看病過程。

輸入資料報含多組測試,請處理到檔案結束。 

每組資料第一行有乙個正整數n(0對於每個"out a"事件,請在一行裡面輸出被診治人的編號id。如果該事件時無病人需要診治,則輸出"empty"。 

診治人的編號id的定義為:在一組測試中,"in a b"事件發生第k次時,進來的病人id即為k。從1開始編號。 

7

in 1 1

in 1 2

out 1

out 2

in 2 1

out 2

out 1

2in 1 1

out 1

2

empty31

1

我這裡用了三個優先佇列,看起來比較麻煩,可以用乙個優先佇列組來寫,會減少很多篇幅。

#include #include #include #include #include #include const int maxn=25;

using namespace std;

typedef struct node

}point;

int main()

else if(d==2)

else if(d==3)

}else

else if(s1[1]=='x'){

point p;

p=s.top();

s.pop();

cout《很簡單吧,去練幾道題就掌握了。

hdu - 1509

第一次寫部落格,也是剛剛接觸acm,要是有什麼不對的地方請大家指正,謝謝大家了。

優先佇列及過載的使用

優先佇列 顧名思義,首先它是乙個佇列,但是它強調了 優先 二字,所以,已經不能算是一般意義上的佇列了,它的 優先 意指取隊首元素時,有一定的選擇性,即根據元素的屬性選擇某一項值最優的出隊 優先順序佇列是不同於先進先出佇列的另一種佇列。每次從佇列中取出的是具有最高優先權的元素 優先佇列是0個或多個元素...

pair int,int 排序 優先佇列過載排序

最接近原點的 k 個點 題目鏈結 我們有乙個由平面上的點組成的列表 points。需要從中找出 k 個距離原點 0,0 最近的點。這裡,平面上兩點之間的距離是歐幾里德距離。你可以按任何順序返回答案。除了點座標的順序之外,答案確保是唯一的。示例 輸入 points 1,3 2,2 k 1 輸出 2,2...

(優先佇列)最小函式值

題目描述 有n個函式,分別為f1,f2,fn。定義fi x aix 2 bix ci x n 給定這些ai bi和ci,請求出所有函式的所有函式值中最小的m個 如有重複的要輸出多個 輸入第一行輸入兩個正整數n和m。以下n行每行三個正整數,其中第i行的三個數分別位ai bi和ci。輸入資料保證ai 1...