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);
相关推荐
pyniu7 分钟前
Spring Boot车辆管理系统实战开发
java·spring boot·后端
虾说羊7 分钟前
ssm项目本地部署
java·tomcat
资生算法程序员_畅想家_剑魔8 分钟前
Kotlin常见技术分享-01-相对于Java 的核心优势-空安全
java·安全·kotlin
gelald14 分钟前
AQS 解析:从原理到实战
java·后端
2301_7806698615 分钟前
集合框架(Collection单列集合(常用功能,三种遍历方式及通过并发修改异常认识他们的区别)、Map双列集合)
java
进阶小白猿15 分钟前
Java技术八股学习Day14
java·数据库·学习
super_lzb17 分钟前
mybatis拦截器ResultSetHandler详解
java·spring·mybatis·springboot
ChoSeitaku18 分钟前
16.C++入门:list|手撕list|反向迭代器|与vector对比
c++·windows·list
代码or搬砖20 分钟前
JVM垃圾回收器
java·jvm·算法