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);
相关推荐
男孩李5 分钟前
浅谈Linux的last命令
java·linux·服务器
豆瓣鸡7 分钟前
算法日记 - Day5
java·算法
掉鱼的猫9 分钟前
Solon 的 10 种 HTTP 服务器:改一行依赖,换一个引擎
java·serverless
小鬼头编程14 分钟前
信息学竞赛体系(CSP-J/S、NOIP、NOI、IOI)
c++·人工智能·青少年编程
学者猫头鹰16 分钟前
对象存储:MinIO / 阿里云OSS
java
ACP广源盛1392462567329 分钟前
GSV6155@ACP# Type-C 视频信号转换芯片:技术架构、工程痛点适配与落地场景分析
大数据·c语言·开发语言·人工智能·分布式·嵌入式硬件·架构
我不是懒洋洋32 分钟前
从零实现一个分布式数据管道:dbt的核心设计
c++
光子物联单片机33 分钟前
STM32传感器模块编程实践(二十一)DIY语音控制小车套件模型
c语言·stm32·单片机·嵌入式硬件·mcu
程序员-Benothing36 分钟前
Java集合:List实现类深度对比
java·开发语言·后端·面试·list
wyjcxyyy1 小时前
若依框架漏洞总结
java·ctf