c++ - 相对于使用堆,使用带有 insert() 的向量作为优先级队列的开销是多少?(c++)
问题描述
我目前正在开展一个项目,在该项目中我实现了一个结构指针向量以用作优先级队列。我使用 for 循环来确定向量中的位置(如果不小于后面),然后使用insert()
将结构指针放置在队列中的位置。我back()
用作队列的前端,因此我可以维护向量的弹出功能。
我只是想确定使用堆库是否会增加速度,因为这个项目取决于时间。如果您愿意,可以提供代码,堆/向量的大小可能会大大增加,因为这是 hanoi A* 搜索算法的塔。
想如果有人知道的话,我也会要求未来的知识,以便为我节省一些调试断点洗牌。
解决方案
我做了一个简单的基准测试,首先将N
随机int
s 插入优先级队列,然后弹出N
顶部元素。
可以预期,std::vector
当队列大小较小时,使用线性搜索排序会获胜,而当队列大小较大时std::priority_queue
,它被实现为具有最坏插入时间的最大堆。O(log N)
基准代码可以在这里找到。
推荐阅读
- android - adb shell 命令的区别
- android - Android Q 上“android:useEmbeddedDex”的用途
- ios - didReceiveRemoteNotification 当应用程序在后台仅在设备连接到 MacBook 时工作
- git - 为什么 git pull 在 Drupal 8 中的配置同步后停止工作?
- javascript - 你如何创建一个像 jquery 一样的函数的包装器对象
- javascript - html2canvas 不捕获 div 中的外部图像
- python - CloudFormation 模板错误 Fn::Sub 内部函数未指定预期参数
- matlab - 绘制三个参数的等高线图
- cordova - 'phonegap serve' 是否可以用于生产
- javascript - Asp.net 下拉 onchange 调用函数和函数内获取下拉选择值