Priority Queue (STL)¶
Note
Tested on: UVA11995, URI1244, URI1259, URI1851
With a custom class¶
#include <iostream> // cout, endl
#include <queue> // priority_queue
#include <utility> // pair, make_pair
#include <vector> // vector
#include <functional> // function
using namespace std;
class Object{
public:
int a, b;
Object(int _a, int _b)
{
a = _a;
b = _b;
}
bool operator<(const Object& obj) const
{
if(b == obj.b) return a < obj.a;
return b < obj.b;
}
};
Usage:
priority_queue<Object> pq;
pq.push(Object(1, 2));
pq.push(Object(3, 2));
pq.push(Object(4, 2));
pq.push(Object(1, 7));
pq.push(Object(3, 8));
pq.push(Object(2, 9));
while(!pq.empty())
{
cout << pq.top().a << " " << pq.top().b << endl;
pq.pop();
}
With C++ basic objects¶
#include <iostream> // cout, endl
#include <queue> // priority_queue
#include <utility> // pair, make_pair
#include <vector> // vector
#include <functional> // function
using namespace std;
bool compare_function(const pair<int, int>& p1, const pair<int, int>& p2)
{
return p1.first < p2.first;
}
int main()
{
priority_queue< pair<int, int>,
vector< pair<int, int> >,
function< bool(pair<int, int>, pair<int, int>) >
> pq2(&compare_function);
pq2.push(make_pair(1, 2));
pq2.push(make_pair(4, 2));
pq2.push(make_pair(3, 2));
pq2.push(make_pair(2, 9));
pq2.push(make_pair(1, 7));
pq2.push(make_pair(3, 8));
while(!pq2.empty())
{
cout << pq2.top().first << " " << pq2.top().second << endl;
pq2.pop();
}
return 0;
}