在 priority_queue 内部 pair<int、int> 的情况下决定优先级?

Deciding priority in case of pair<int, int> inside priority_queue?

本文关键字:int gt 情况下 决定 优先级 priority pair 内部 lt queue      更新时间:2023-10-16

如果在priority_queue中插入pair<int, int>,那么优先级将由哪个元素决定?我们能决定哪个要素将决定优先次序吗?

是的,您可以通过使用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;
}