C&C++   发布时间:2022-04-03  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了c – 常量大小优先级队列 – 先插入或先删除?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用priority_queue来存储到目前为止在K-最近邻居搜索中找到的K个最近点.当我发现一个点比队列顶部的点更近时,我想弹出顶部元素并推送新元素.

if(point < pq.top()){
    pq.pop();
    pq.push(point);
}

通常,首先弹出然后插入是否更有效,或者首先插入然后弹出更有效?

解决方法

如果使用std :: priority_queue作为优先级队列类,则认情况下标准容器类std :: vector用于其基础容器类.

通常,首先推送比首先推送效率低.

理由一

在priority_queue中推送一个元素将调用vector :: push_BACk,如果超过当前容量,它可能会重新分配底层缓冲区.

原因二

假设优先级队列中现在有N个元素.

如果先按下,则会调用push_heap算法两次,分别调整N 1和N 1个元素.

如果先弹出,则调用push_heap算法两次,分别调整N和N个元素.

在旁边

如果您正在实现自己的优先级队列,这可能会节省性能.既然您已经使用top检查了值,我想知道您是否可以直接将元素与顶部交换而不调用push / pop,从而绕过堆调整算法.然可能不实用.

大佬总结

以上是大佬教程为你收集整理的c – 常量大小优先级队列 – 先插入或先删除?全部内容,希望文章能够帮你解决c – 常量大小优先级队列 – 先插入或先删除?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。