Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 在成对情况下决定优先权<;int,int>;在优先队列内?_C++_Std_Priority Queue - Fatal编程技术网

C++ 在成对情况下决定优先权<;int,int>;在优先队列内?

C++ 在成对情况下决定优先权<;int,int>;在优先队列内?,c++,std,priority-queue,C++,Std,Priority Queue,如果我们在优先级队列中插入对,那么优先级将由哪个元素决定?我们可以决定哪个元素决定优先级吗?是的,您可以使用优先级队列的比较模板参数提供自己的比较器。默认情况下,Compare默认为std::less,其中T是元素类型,这会导致,您能再解释一下吗? template <class T1, class T2> bool operator<(const pair<T1, T2>& x, const pair<T1, T2>& y) { ret

如果我们在
优先级队列
中插入
,那么优先级将由哪个元素决定?我们可以决定哪个元素决定优先级吗?

是的,您可以使用
优先级队列的
比较
模板参数提供自己的比较器。默认情况下,
Compare
默认为
std::less
,其中
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;
}