PriorityQueue 改变排序方式,倒叙

本文详细比较了使用Comparator的reverseOrder()、自定义Comparator和Lambda表达式来调整PriorityQueue元素顺序的方法,帮助理解Java中优先队列的高级操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方式一 调用 comparator.reverseOrder () 方法

PriorityQueue<Integer> pq = new PriorityQueue<>(Comparator.reverseOrder());

方式二 Override comparator#

PriorityQueue pq = new PriorityQueue<>(new Comparator<Integer>() {
    @Override
    public int compare(Integer a, Integer b) {
        return b - a;
    }
});

方式三 Lamda 表达式

PriorityQueue<Integer> pq = new PriorityQueue<>((a, b) -> b - a);

 

### C++ `priority_queue` 自定义排序 在C++中,为了使 `std::priority_queue` 实现特定的排序逻辑,可以提供自定义比较器。这通过模板参数中的第三个参数完成,该参数通常是一个函数对象或 lambda 表达式。 #### 基本语法结构 当声明一个带有自定义顺序的优先级队列时,需指明三个模板参数:元素类型、底层容器类型以及用于比较元素的标准[^1]。对于简单的整数情况,默认情况下会创建最大堆;如果希望构建最小堆,则需要改变比较方式。 ```cpp #include <iostream> #include <queue> // 定义一个类来作为比较器 struct Compare { bool operator()(const int& lhs, const int& rhs) const { return lhs > rhs; // 创建一个小顶堆 } }; int main() { // 使用自定义比较器初始化 priority_queue std::priority_queue<int, std::vector<int>, Compare> minHeap; minHeap.push(3); minHeap.push(1); minHeap.push(2); while (!minHeap.empty()) { std::cout << "Top element is: " << minHeap.top() << '\n'; minHeap.pop(); } return 0; } ``` 上述代码展示了如何利用结构体重载 `operator()` 来定制化比较行为,并以此为基础实例化了一个最小堆形式的 `priority_queue`[^2]。 另外一种更简洁的方法是采用lambda表达式直接在线定义比较规则: ```cpp auto cmp = [](int left, int right){return left > right;}; std::priority_queue<int,std::vector<int>,decltype(cmp)> customQueue{cmp}; customQueue.push(5); customQueue.push(7); customQueue.push(6); while(!customQueue.empty()){ std::cout<<"Current top:"<<customQueue.top()<<'\n'; customQueue.pop(); } ``` 这里使用了匿名函数(即lambda),它同样实现了从小到大排列的效果[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值