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

如何不传入显式Compare对象,从Container构造std::priority_queue实例

现有标准下的实现方式

你可以使用迭代器范围构造函数,无需显式传入比较器即可从已有std::vector构造优先级队列:

std::vector<int> vec;
// 填充vec的元素
std::priority_queue<int> pq(vec.begin(), vec.end());

如果需要移动容器元素避免拷贝,C++23及更高版本已经正式支持你提到的仅接受容器的构造函数重载,可以直接编写如下代码:

// C++23 起合法
std::priority_queue<int> pq(std::move(vec));

未提供对应构造函数的原因

这个问题属于C++标准库的历史设计疏漏:

  • C++98最初设计std::priority_queue时,所有接收容器参数的构造函数都将比较器参数放在参数列表的前位,没有额外设计仅传容器、使用默认比较器的重载,当时的设计优先照顾了自定义比较器的场景,忽略了使用默认比较器的高频场景。
  • 后续C11新增移动语义、C17完善类模板推导的迭代过程中,都没有及时补上这两个重载,直到C++23标准才正式将这两个构造函数加入规范,填补了这个设计缺口。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 07:48:02