如何在C++优先级队列容器的比较器中直观地理解大于/小于运算符

day*_*yup 3 c++ priority-queue

我总是对为优先级队列容器定义比较器感到困惑,并且不知道如何理解它.例如,我有一个vectorpair<int,int>,在这里我想通过它的第二个字段值对递减排序.

所以代码看起来像这样:

 struct Compare
    {
        bool operator()(pair<int,int> const &p1, pair<int,int> const &p2) const
        {
            return p1.second < p2.second;
        }
    };



priority_queue<pair<int,int>,vector<pair<int,int> >, Compare> pqueue;
Run Code Online (Sandbox Code Playgroud)

如何理解"<"这里的操作员,因为我认为它应该是">"第一次,并且必须根据结果进行更改.为什么"<"降序而不是">"?我只想在下次使用时第一次拍摄时才能正确使用priority_queue.谢谢.

das*_*ght 5

优先级队列基于比较运算符返回顶部元素,这意味着当您逐个检索项目时,将按降序获取它们.

比较运算符的含义始终保持"小于",这意味着当compare(A, B)为真时,B具有更高的优先级A,并且将从优先级队列中更早地返回.

反转比较功能会反转从优先级队列中获取项目的顺序.具体而言,使用>代替<反转顺序升序.