如何直观理解C++优先级队列容器comparator中large than/less than operator

How to intuitively understand larger than/less than operator in comparator of C++ priority queue container

我总是对为优先级队列容器定义比较器感到困惑,不知道如何理解它。 例如,我有一个 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;

这里的运算符"<"怎么理解,因为我第一次觉得应该是">",只好根据结果改了。为什么降序是 "<" 而不是 ">"?我只是想在下次使用 priority_queue 时在第一次拍摄时就把它弄好。谢谢你。

优先级队列 returns top 元素基于比较运算符,意思是当你一项一项检索时,你在 降序顺序。

比较运算符的含义始终停留在"less than",意思是当compare(A, B)为真时,B的优先级高于A,并且会更早地从优先队列中返回。

反转比较函数会反转您从优先队列中获取项目的顺序。具体来说,使用 > 代替 < 会将顺序反转为 升序

在某种程度上,您感到有点不安是对的,因为我们可以将最高优先级与更高的值相关联,这可能是违反直觉的。

但是在优先级队列中,通常假定优先级顺序是从最低值到最高值。即集合中最小的元素优先级最高,依此类推

我认为这个 "inversion" 的直观原因与许多贪婪算法优先考虑较低成本的事实有关,为了管理它,这些算法可以使用成本优先级队列。