2016-05-19 29 views

回答

3

是的,您可以使用priority_queueCompare模板参数来提供自己的比较器。默认情况下,Compare默认为std::less<T>其中T是元素类型,这会导致<操作者叫上对,这是专门为:

template <class T1, class T2> 
bool operator<(const pair<T1, T2>& x, const pair<T1, T2>& y) 
{ return x.first < y.first || (!(y.first < x.first) && x.second < y.second) } 

以下是如何使用不同的比较器的示例:

#include <queue> 
#include <utility> 
#include <vector> 

using namespace std; 

struct CompareByFirst { 
    constexpr bool operator()(pair<int, int> const & a, 
           pair<int, int> const & b) const noexcept 
    { return a.first < b.first; } 
}; 

int main() { 
    priority_queue<pair<int, int>, 
        std::vector<pair<int, int> >, 
        CompareByFirst> myQueue; 
}