【问题标题】:Comparator for Priority Queue[C++]优先队列比较器[C++]
【发布时间】:2020-09-07 06:28:15
【问题描述】:

我试图了解我的比较器应该为向量的优先级队列返回什么,我想要基于第三个元素的最小堆。

在搜索中,我发现比较器看起来像:

bool operator()(vector<int>a, vector<int> b)
{
return a[2]>b[2];
}

为什么不a[2]&lt;b[2]

【问题讨论】:

  • std::priority_queue 首先返回最大元素。这就是它的定义方式。
  • 这个比较器会让priority_queue把最小元素放在最上面
  • 对vector使用const引用而不是按值传递,你不想每次比较时都复制它们
  • cppreference 很好地解释了比较器的外观和原因。见en.cppreference.com/w/cpp/container/priority_queue
  • @flowit 起初无法理解它,但在记下几个例子后才明白它的真正含义。谢谢!

标签: c++ comparator priority-queue


【解决方案1】:

最大堆是一个向量或二叉树,其中每个节点包含的数据大于或等于其子节点的数据,因此叶子在队列中具有最小值。在内部,优先级队列表示为一个最大堆并进行排序,以便可以首先访问具有最大值的节点。如果要对元素a[2]&lt;b[2] 进行排序,可以覆盖比较器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    • 2021-06-17
    • 1970-01-01
    • 1970-01-01
    • 2020-10-14
    相关资源
    最近更新 更多