C++ 优先级队列(priority_queue)
优先级队列顾名思义是根据元素的优先级被读取,接口和queues非常相近。程序员可以通过template参数指定一个排序准则。缺省的排序准则是利用operator< 形成降序排列,那么所谓“下一个元素”就是“数值最大的元素”。
如果同时存在若干个数值最大的元素,无法确知究竟哪一个会入选。
头文件:<queue>
在文件 <queue> 中,class priority_queue 定义如下:
namespace std {
template < class T ,
class Container = vector<T> ,
class Compare = less <typename Container::value_type> >
class priority_queue ;
}
由于priority queue需要用到STL heap算法,所以其内部容器必须支持随机存取迭代器。例如你可以使用deque来容纳元素:
std::priority_queue< float, std::deque<float> > pbuffer ;
核心接口
push() 将一个元素置于priority queue中
top() 返回priority queue中的“下一个元素”
pop() 从priority queue 中移除一个元素
注意:如果priority queue 内没有元素,执行top()和pop()会导致未定义的行为,应该先采用size()或empty()来检验容器是否为空。
运用实例
// 使用VS2008 和 code::blocks 10.05调试通过
#include <iostream>
#include <queue>
using namespace std ;
int main()
{
priority_queue<float> q;
// insert three elements into the priority queue
q.push (66.6);
q.push (22.2);
q.push (44.4);
// read and print two elements
cout << q.top () << ' ';
q.pop ();
cout << q.top () << endl;
q.pop ();
// insert three more elements
q.push (11.1);
q.push (55.5);
q.push (33.3);
// skip one element
q.pop ();
// pop and print remaining elements
while (!q.empty ()) {
cout << q.top () << ' ';
q.pop ();
}
cout << endl ;
}
参考资料 《C++标准程序库》侯捷 孟岩译
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器