priority_queue+lambda
时间: 2025-01-30 08:34:16 浏览: 38
### 如何在 `priority_queue` 中使用 Lambda 进行自定义比较
在 C++ 中,可以利用 lambda 表达式来自定义 `std::priority_queue` 的比较规则。这使得实现特定需求下的优先级逻辑变得非常灵活。
通过传递带有捕获列表和参数的匿名函数作为模板实参的一部分来定制化行为。下面是一个具体的例子展示如何创建基于整数值平方大小决定顺序的最大堆:
```cpp
#include <iostream>
#include <queue>
int main() {
auto cmp = [](const int& a, const int& b) -> bool {
return a * a < b * b;
};
// 定义一个按照元素平方值降序排列的最大堆
std::priority_queue<int, std::vector<int>, decltype(cmp)> customPQ(cmp);
customPQ.push(-7);
customPQ.push(8);
customPQ.push(-9);
customPQ.push(4);
while (!customPQ.empty()) {
std::cout << "Top element (with largest square value): "
<< customPQ.top() << '\n';
customPQ.pop();
}
return 0;
}
```
此代码片段展示了如何构建一个特殊的最大堆,在这个堆里,具有较大绝对值得数会先被弹出[^1]。
对于更复杂的数据结构比如结构体或类的对象来说,也可以采用类似的lambda表达式的写法来进行成员变量间的对比操作。例如当处理包含多个字段的学生记录时,可以根据成绩高低或者其他属性组合起来制定复杂的排序条件[^2]。
阅读全文
相关推荐


















