C++ priority_queue使用自定义比较器的方法
时间: 2024-06-16 08:03:50 浏览: 18
C++中的priority_queue是一个优先队列容器,它默认使用std::less作为比较器,即创建一个最大堆。如果你想要使用自定义的比较器来创建一个最小堆,你可以按照以下两种方法之一进行操作[^1][^2]:
1. 使用lambda表达式作为比较器:
```cpp
#include <queue>
using namespace std;
int main() {
priority_queue<int, vector<int>, function<bool(int, int)>> pq([](int a, int b) {
return a > b;
});
pq.push(3);
pq.push(1);
pq.push(2);
while (!pq.empty()) {
cout << pq.top() << " ";
pq.pop();
}
return 0;
}
```
2. 使用自定义的比较函数作为比较器:
```cpp
#include <queue>
using namespace std;
bool cmp(int a, int b) {
return a > b;
}
int main() {
priority_queue<int, vector<int>, function<bool(int, int)>> pq(cmp);
pq.push(3);
pq.push(1);
pq.push(2);
while (!pq.empty()) {
cout << pq.top() << " ";
pq.pop();
}
return 0;
}
```
这两种方法都可以创建一个最小堆,并按照自定义的比较规则进行排序。