I'm wanting to do something like this:
priority_queue< pair<int, int>, vector<int>, greater<int> > Q;
This works fine if the type I'm comparing is int
, i.e.:
priority_queue< int, vector<int>, greater<int> > Q;
however, obviously with the pair<int, int>
, there is no way of comparing the pairs in the queue with the standard >
. I was wondering what I should do? How would I implement an overloaded >
or is there another way I can create a priority queue of pairs with the smallest pair.second
being at the top of the queue?
Have you tried this?
typedef pair<int, int> P;
priority_queue< P, vector<P>, greater<P> > Q;
This will give the reverse ordering of the normal operator<
for pair<int, int>
, which will start with the smallest first
tie-broken with smallest second
.
If you want to sort by smallest second
first and first
second (!) then you'll need a new sorting functor:
struct Order
{
bool operator()(P const& a, P const& b) const
{
return a.second < b.second || a.second == b.second && a.first < b.first;
}
}
Then use:
priority_queue< P, vector<P>, Order > Q;