首页 > 解决方案 > 是否可以在 C++ 中使用容器的大小作为 priority_queue 的优先级?

问题描述

#include <iostream>
#include <queue>

using namespace std;

int main() {
  priority_queue<vector<int>> q;
  q.push({1, 2, 3});
  q.push({3});
  q.push({1, 2});
  q.push({0, 1, 2, 3, 4});

  while (!q.empty()) {
    cout << q.top().size() << endl;
    q.pop();
  }
}

上面的代码会输出

1
3
2
5

我想得到

1
2
3
5

我四处搜寻,但无法找出正确的方法或不确定是否可行。任何帮助都会很棒,在此先感谢。

标签: c++priority-queue

解决方案


在构建priority_queue时,您可以提供自己的比较功能。

请参阅https://en.cppreference.com/w/cpp/container/priority_queue

// Using lambda to compare elements.
auto cmp = [](int left, int right) { return (left ^ 1) < (right ^ 1); };
std::priority_queue<int, std::vector<int>, decltype(cmp)> q3(cmp);

只需根据您的要求更改类型


推荐阅读