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

C++中std::sort与priority_queue的比较器排序顺序差异问题

C++ priority_queue与std::sort同用less排序结果不同的原因

先附上测试代码:

priority_queue<int, vector<int>, less<int> > pq;
pq.push(1);
pq.push(2);
pq.push(3);
// 若依次调用pop()输出元素,得到顺序为3, 2, 1

vector<int> v;
v.push_back(1);
v.push_back(3);
v.push_back(2);
std::sort(v.begin(), v.end(), less<int>()); 
// 排序后vector的元素顺序为1, 2, 3

二者结果差异的核心原因是对比较器的语义定义完全不同:

  • std::sort的比较器规则:当比较器comp(a, b)返回true时,代表排序逻辑中a应该排在b的前面。使用less<int>()时,仅当a < b时返回true,因此更小的元素会被放在序列前面,最终得到升序排列的结果。
  • priority_queue的比较器规则:当比较器comp(a, b)返回true时,代表a的优先级低于b,b会被放在更靠近堆顶的位置。使用less<int>()时,仅当a < b时返回true,说明数值更大的元素优先级更高,堆顶始终存放当前最大的元素,依次pop()就会得到降序排列的结果。

如果需要priority_queue的弹出顺序和std::sort升序结果一致,将比较器替换为greater<int>即可,此时数值更小的元素优先级更高,弹出顺序为1、2、3。

内容的提问来源于stack exchange,提问作者J. Victor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 12:30:05