在 C++ 中可以使用容器的大小作为 priority_queue 的优先级吗?
Is possible to use container's size as priority_queue's priority in C++?
#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
我四处搜索但无法找出正确的方法或不确定是否可行。任何帮助都会很棒,提前致谢。
在构造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);
只需根据您的要求更改类型
查看 the documentation,类似这样的方法可能有效:
// Using lambda to compare elements.
auto cmp = [](const std::vector<int> &left, const std::vector<int> &right)
{
return left.size() < right.size();
};
std::priority_queue<std::vector<int>, std::vector<std::vector<int>>, decltype(cmp)> q(cmp);
#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
我四处搜索但无法找出正确的方法或不确定是否可行。任何帮助都会很棒,提前致谢。
在构造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);
只需根据您的要求更改类型
查看 the documentation,类似这样的方法可能有效:
// Using lambda to compare elements.
auto cmp = [](const std::vector<int> &left, const std::vector<int> &right)
{
return left.size() < right.size();
};
std::priority_queue<std::vector<int>, std::vector<std::vector<int>>, decltype(cmp)> q(cmp);