priority_queue cmp
时间: 2024-12-26 18:27:39 浏览: 70
### C++ `priority_queue` 自定义比较器用法
在C++标准库中,`std::priority_queue` 默认是一个最大堆,即最大的元素位于顶部。为了改变这一行为或实现更复杂的逻辑,可以自定义比较器。
#### 定义自定义比较器类
通过创建一个小于运算符重载的仿函数(functor),来指定优先级顺序:
```cpp
struct Compare {
bool operator()(const int& a, const int& b) const {
return a > b; // 创建最小堆
}
};
```
此结构体中的操作会使得较小数值具有更高优先级[^1]。
#### 使用自定义比较器初始化 `priority_queue`
当声明 `priority_queue` 时,可以通过模板参数传递该比较器以及底层容器类型(可选):
```cpp
#include <queue>
#include <vector>
// 声明一个基于 vector 的最小堆
std::priority_queue<int, std::vector<int>, Compare> minHeap;
```
上述代码片段展示了如何利用自定义比较器构建一个最小堆而不是默认的最大堆。
对于更加复杂的数据结构比如对象实例,则可以在比较器内部访问成员变量来进行对比判断:
```cpp
struct Job {
int id;
double urgency;
// 构造函数...
};
struct JobCompare {
bool operator()(Job* j1, Job* j2) const {
return j1->urgency < j2->urgency; // 更紧急的任务有更高的优先权
}
};
int main() {
std::priority_queue<Job*, std::vector<Job*>, JobCompare> jobQueue;
}
```
这段例子说明了怎样针对特定应用需求设计合适的比较机制。
阅读全文
相关推荐


















