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);
相关推荐
计算机安禾1 分钟前
【算法设计与分析】第29篇:启发式与元启发式搜索方法综述
java·数据库·算法
DIY源码阁2 分钟前
JavaSwing学生选课系统 - MySQL版
java·数据库·mysql·eclipse
头歌实践平台5 分钟前
C++面向对象 - 运算符重载的应用
开发语言·c++·算法
思麟呀6 分钟前
C++11并发编程:互斥锁
linux·开发语言·c++·windows
砍材农夫7 分钟前
物联网实战:Spring Boot + Netty 搭建 MQTT | MQTT 设备模拟器
java·spring boot·后端·物联网·struts·spring·netty
城管不管11 分钟前
Agent——001
android·java·数据库·llm·prompt
AC赳赳老秦11 分钟前
OpenClaw批量任务队列优化:解决任务堆积、执行缓慢、优先级混乱问题
java·大数据·数据库·c++·自动化·php·openclaw
晚风予卿云月13 分钟前
《二分答案》算法练习
数据结构·c++·算法·二分·竞赛·算法随笔
郭涤生16 分钟前
C++ 各类数据的内存分区与读写性能详解
开发语言·c++
Pluchon17 分钟前
萌萌技术分享笔记——Java综合项目
java·开发语言·笔记·git·github·mybatis·postman