C/C++|关于 std::priority_queue (优先级队列)的第三个模版参数

读者可以先看这篇文章,可以为你解答为什么 std::priority_queue 的第三个模版参数这么讲究。

总而言是,第三个参数要求的是一个 比较器 对象

被称之为对象,那么肯定是一个类,并且该类应该可以被实例化为一个对象。最好理解的就是仿函数(重载 operator() 的类),这里总结几套写法

自定义函数对象:

cpp 复制代码
struct Compare {
    bool operator()(ListNode* a, ListNode* b) {
        return a->val > b->val;
    }
};
std::priority_queue<ListNode*, std::vector<ListNode*>, Compare> pq;

Lambda表达式

cpp 复制代码
auto cmp = [](ListNode* a, ListNode* b) { return a->val > b->val; };
std::priority_queue<ListNode*, std::vector<ListNode*>, decltype(cmp)> pq(cmp);

当然了,我们也可以使用 std::function 直接声明 cmp 的类型:

cpp 复制代码
std::priority_queue<ListNode*, 
					std::vector<ListNode*>, 
					std::function<bool>(ListNode*, ListNode*)> pq(cmp);

函数指针

cpp 复制代码
bool compare(ListNode* a, ListNode* b) {
    return a->val > b->val;
}
std::priority_queue<ListNode*, 
					std::vector<ListNode*>, 
					bool(*)(ListNode*, ListNode*)> pq(compare);
相关推荐
靠沿3 分钟前
Java数据结构初阶——Collection、List的介绍与ArrayList
java·数据结构·list
程序猿小蒜5 分钟前
基于springboot的的学生干部管理系统开发与设计
java·前端·spring boot·后端·spring
利刃大大31 分钟前
【动态规划:背包问题】完全平方数
c++·算法·动态规划·背包问题·完全背包
q***563831 分钟前
Spring容器初始化扩展点:ApplicationContextInitializer
java·后端·spring
q***518937 分钟前
SpringCloud系列教程:微服务的未来(十四)网关登录校验、自定义过滤器GlobalFilter、GatawayFilter
java·spring cloud·微服务
月光技术杂谈39 分钟前
实战:C驱动框架嵌入Rust模块的互操作机制与完整流程
c语言·开发语言·rust·ffi·跨语言·bindgen·互操作
go__Ahead1 小时前
【Java】线程池源码解析
java·juc
wyhwust1 小时前
数组----插入一个数到有序数列中
java·数据结构·算法
笑非不退1 小时前
C# c++ 实现程序开机自启动
开发语言·c++·c#
专注于大数据技术栈1 小时前
java学习--final
java·开发语言·学习