c++ - 相对于使用堆,使用带有 insert() 的 vector 作为优先级队列的开销是多少? (c++)

标签 c++ performance vector heap overhead

我目前正在从事一个项目,我在该项目中实现了一个结构指针 vector 以用作优先级队列。我使用 for 循环来确定 vector 中的位置(如果不小于后面),然后使用 insert() 将结构指针放置在队列中的位置。我使用 back() 作为队列的前端,这样我就可以保持 vector 的弹出功能。

我只是想确定使用堆库是否会增加速度,因为这个项目取决于时间。如果您愿意,可以提供代码,堆/vector 的大小可能会大大增加,因为这是一个汉诺塔 A* 搜索算法。

如果有人知道的话,我想我也会询问 future 的知识,以便为我节省一些调试断点洗牌。

最佳答案

我做了一个简单的基准测试,首先将 N 个随机 int 插入优先级队列,然后弹出 N 个顶部元素。

预期,当队列较小时,使用线性搜索排序的 std::vector 获胜,而 std::priority_queue 实现为最大堆O(log N) 最坏情况插入时间,当队列大时获胜。

Priority queues benchmark - Intel(R) Core(TM) i7-4770

基准代码可见here .

关于c++ - 相对于使用堆,使用带有 insert() 的 vector 作为优先级队列的开销是多少? (c++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58762157/

相关文章:

c++ - 在C++中初始化一个二维对象数组

c++ - 为什么在这种情况下使用范围 for 循环会产生与使用常规 for 循环不同的输出?

r - 如何将列表转换为 R 中的矩阵

c# - 击败值(value)传递的最佳方式

c# - 从数组中查找相等或最接近的较小值

java - 确定最后一位上车的乘客! - 满足时间复杂性

c++ - 多显示器环境中的鼠标环绕

c++ - 作为容器的初始化程序列表不起作用

c++ - msvc 和 clang 中的函数调用不明确,但 gcc 中没有

performance - 运行混淆代码时是否会影响性能?