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

C++ priority_queue比较规则疑问及sort与优先级队列比较器合并问询

Q1 解答

你没有遗漏堆实现的相关知识点,这里的歧义来自于描述里的「排序在前」特指使用同一Compare规则作为std::sort的比较函数时,排序后位于数组靠前位置的元素。
举个最简单的例子:默认的std::less比较规则,传给std::sort时会得到升序序列[1,2,3,4,5],也就是1是「排序在前」的元素;但把同一个std::less传给priority_queue作为比较规则时,priority_queue是大顶堆,弹出顺序是5、4、3、2、1,也就是刚才排序最靠前的1反而最后输出,这就是文档描述的含义。
priority_queue的比较规则语义和sort正好相反:比较规则返回true时,代表第一个参数的优先级低于第二个参数,要放在堆的下层,所以堆顶永远是优先级最高的元素,和sort的升序/降序逻辑是反的,你之前掌握的堆索引计算逻辑完全正确。

Q2 解答

你可以通过静态成员函数的方式把两个比较逻辑放到同一个struct里,不会出现重载冲突,因为静态成员函数没有隐含的this指针,和非静态的operator()签名不重复,参考实现如下:

struct Compare
{
    // 给sort用的比较逻辑:按第0位升序
    static bool sortCmp(const vector<int>& l, const vector<int>& r) { 
        return l[0] < r[0]; 
    }
    // 给priority_queue用的比较逻辑:按第1位实现小顶堆
    bool operator()(const vector<int>& l, const vector<int>& r) const { 
        return r[1] < l[1]; 
    }
};

int solution(vector<vector<int>> jobs) {
    sort(jobs.begin(), jobs.end(), Compare::sortCmp);
    priority_queue<vector<int>, vector<vector<int>>, Compare> jobQueue;
    // 后续业务逻辑
}

这里额外把参数改成了const引用、operator()加了const修饰,符合C++ const正确性规范,避免比较过程中意外修改元素。

内容的提问来源于stack exchange,提问作者신승빈

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 04:48:03