środa, 27 lutego 2008

Jak zrobić, aby w priority_queue na początku było minimum (po raz drugi)

Dzisiaj ktoś mnie zapytał jak zrobić kolejkę priorytetową (ang. priority_queue) par liczb całkowitych, aby na jej początku znajdowało się minimum. Odpowiedź właściwie znajduje się w mojej wypowiedzi zamieszczonej tutaj. Co prawda nie mam tam par, lecz same liczby całkowite.
Aby uniknąć niejasności, umieszczam poniżej przykład programu, w którym kolejka priorytetowa z biblioteki STL, zawiera minimum na samym początku (ang. top).

#include<iostream>
#include<algorithm>
#include<queue>
#include<cassert>
using namespace std;
typedef pair<int,int> PII; // chwilowa podmiana nazwy typu
int main(void)
{
priority_queue<PII, vector<PII>, greater<PII> > Q; // sprawia, że na szczycie kolejki jest minimum

Q.push(make_pair(3,4));
Q.push(make_pair(2,7));

assert( Q.top() == make_pair(2,7) );

cout << Q.top().first << "," << Q.top().second << endl;
return 0;
}

1 komentarz:

Anonimowy pisze...

Cześć. Potrzebuję stworzyć taką kolejkę ale nie par tylko trójek intów. I priorytet wg jednego z nich. Można coś takiego zrobić w ogole?