【c++】priority_queue自定义小根堆

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) {}
};
struct cmp{
    bool operator()(ListNode *a, ListNode *b){
    return a->val > b->val; //是> 而不是<
    }
};
int main(){
	priority_queue<ListNode *, vector<ListNode *>, cmp> q;//自定义小根堆
	priority_queue<int> q;//默认大根堆
	priority_queue<int, vector<int>, greater<int>> q;//小根堆
    return 0;
}
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你好!C++中的`priority_queue`是一个容器适配器,用于实现堆数据结构。默认情况下,它是一个大堆(大顶堆),即具有最大元素的元素位于队列的前面。如果你想要实现小堆(小顶堆),可以通过以下两种方式来实现: 1. 自定义比较函数:你可以提供一个自定义的比较函数,将其作为`priority_queue`的第三个模板参数。这个比较函数需要返回`true`当第一个参数应该排在第二个参数之前,否则返回`false`。 例如,如果你想要实现一个存储整数的小堆,可以这样写: ```cpp #include <queue> // 自定义比较函数 struct Compare { bool operator()(const int& a, const int& b) const { return a > b; // 使用"小于"号来反转比较结果 } }; int main() { std::priority_queue<int, std::vector<int>, Compare> pq; // 向小堆中插入元素 pq.push(5); pq.push(2); pq.push(10); // 输出小堆中的元素 while (!pq.empty()) { std::cout << pq.top() << " "; pq.pop(); } return 0; } ``` 输出结果为:2 5 10。 2. 使用lambda表达式:如果你只需要在一个特定的地方定义一个小堆,你可以使用lambda表达式来定义比较函数。 例如,使用lambda表达式来实现一个小堆: ```cpp #include <queue> int main() { std::priority_queue<int, std::vector<int>, decltype([](const int& a, const int& b) { return a > b; })> pq; // 向小堆中插入元素 pq.push(5); pq.push(2); pq.push(10); // 输出小堆中的元素 while (!pq.empty()) { std::cout << pq.top() << " "; pq.pop(); } return 0; } ``` 输出结果为:2 5 10。 希望能帮到你!如果有任何问题,请随时问我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值