仿函数的使用(优先队列)

最大堆

力扣23

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */

class Comp{
public:
    bool operator()(ListNode* node1,ListNode* node2){
        return node1->val > node2->val;
    }
};
class Solution {
public:
    ListNode* mergeKLists(vector<ListNode*>& lists) {
        if(lists.empty())   return nullptr;
        std::priority_queue<ListNode*,std::vector<ListNode*>,Comp> q;
        for(const auto& iter:lists){
            if(iter) {
                q.push(iter);
            }  
        }
        ListNode* dummy=new ListNode(0),*cur=dummy;
        while(!q.empty()){
            cur->next=q.top();
            q.pop();
            cur=cur->next;
            if(cur->next){
                q.push(cur->next);
            }
        }
        return dummy->next;
    }
};

仿函数的使用,利用operator进行重载。

//最大堆的使用
class<template T>
std::priority<T,std::vector<T>,std::greater<T>> q;
std::priority<T,std::vector<T>,std::less<T>> q;

lambda函数使用

std::sort(s.begin(),s.end(),[](){

});
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
优先队列是一种数据结构,它可以按照一定的优先级顺序对元素进行排序和访问。在 C++ 中,我们可以使用优先队列容器来实现这个功能。 优先队列容器是通过堆的数据结构实现的,所以在使用优先队列时,我们需要指定元素的比较方式。在 C++ 中,我们可以通过仿函数(function object)来定义比较规则。 仿函数是一种类对象,它可以像函数一样被调用。在优先队列中,我们需要定义一个仿函数来确定元素的优先级顺序。这个仿函数需要重载函数调用运算符 `operator()`,并根据自定义的比较规则来判断两个元素的优先级。 以下是一个示例代码,展示了如何使用仿函数来定义优先队列的比较规则: ```cpp #include <iostream> #include <queue> class MyCompare { public: bool operator()(int a, int b) { // 自定义比较规则,这里使用逆序 return a > b; } }; int main() { std::priority_queue<int, std::vector<int>, MyCompare> pq; pq.push(3); pq.push(1); pq.push(5); while (!pq.empty()) { std::cout << pq.top() << " "; pq.pop(); } return 0; } ``` 在上面的示例中,我们定义了一个名为 `MyCompare` 的仿函数类,重载了 `operator()` 运算符,使用逆序的方式来比较元素的优先级。然后,我们在创建优先队列时将 `MyCompare` 作为第三个参数传递进去,告诉优先队列使用这个仿函数来确定元素的优先级顺序。 当我们按照逆序的方式插入元素后,从优先队列中取出的元素会按照升序的方式输出。 希望这个示例可以帮助你理解如何使用仿函数来定义优先队列的比较规则。如有疑问,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值