You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何C++比较器在priority_queue与sort()中行为相反?

sort与priority_queue比较器行为差异的原因

核心问题在于C++标准库中sort和priority_queue对比较器的语义定义完全不同:

1. sort的比较器逻辑

sort的比较器用来定义「前序关系」:当comp(a,b)返回true时,表示a应该被排列在b的前面。
你的MyCompare中a < b返回true,意味着更小的元素要排在前面,所以sort处理后得到升序结果1,2,3,符合预期。

2. priority_queue的比较器逻辑

priority_queue的比较器用来定义「堆的下层判断规则」:当comp(a,b)返回true时,表示a的优先级低于b,b会被放在a的上层(更靠近堆顶)。
你的比较器中a < b返回true,相当于「当a比b小时,a优先级更低」,因此更大的元素会被推到堆顶,最终弹出顺序为3,2,1。

实现预期的最小堆(优先弹出最小元素)

如果想让priority_queue优先弹出较小元素,需要让较大的元素优先级更低,修改比较器即可:

class MyCompare {
public:
    bool operator()(int a, int b){
        return a > b; // a比b大时,a优先级更低,b会留在堆顶
    }
};

或者直接使用标准库自带的greater<int>:

priority_queue<int, vector<int>, greater<int>> pq;

此时再执行入队代码,弹出顺序就会是1,2,3,符合你的预期。

内容的提问来源于stack exchange,提问作者DawnRising

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 10:20:17