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);
相关推荐
spencer_tseng3 小时前
Stream not available [SysDictDataMapper.xml]
xml·java
蒸蒸yyyyzwd7 小时前
cpp对象模型学习笔记1.1-2.8
java·笔记·学习
程序员徐师兄8 小时前
Windows JDK11 下载安装教程,适合新手
java·windows·jdk11 下载安装·jdk11 下载教程
RANCE_atttackkk8 小时前
[Java]实现使用邮箱找回密码的功能
java·开发语言·前端·spring boot·intellij-idea·idea
五岳9 小时前
DTS按业务场景批量迁移阿里云MySQL表实战(下):迁移管理平台设计与实现
java·应用·dts
zhougl9969 小时前
Java 所有关键字及规范分类
java·开发语言
Python 老手9 小时前
Python while 循环 极简核心讲解
java·python·算法
java1234_小锋10 小时前
Java高频面试题:MyISAM索引与InnoDB索引的区别?
java·开发语言
Mr_Xuhhh10 小时前
MySQL函数详解:日期、字符串、数学及其他常用函数
java·数据库·sql
Bella的成长园地10 小时前
面试中关于 c++ async 的高频面试问题有哪些?
c++·面试