c++ - priority_queue::emplace 调用 push_heap?

标签 c++ performance priority-queue emplace

根据 CPP Reference , std::priority_queue::emplace “有效调用”

c.emplace_back(std::forward<Args>(args)...); 
std::push_heap(c.begin(), c.end(), comp);

这里的“有效”是什么意思?这是否意味着 emplace 具有与那些调用相同的功能,或者 emplace 是使用这些调用实际实现的(我的理解是实现留给了编译器)。如果 emplace 真的是这样实现的,那不是很低效吗?如果我向现有堆中添加一个元素,则不需要堆化整个堆。

最佳答案

实现当然不必调用算法,但可能会调用。在 emplacing() 之后,元素将向根移动,直到恢复堆不变量。请注意,push_heap() 不会接触整个堆:那将是 make_heap()。相反,push_heap() 只处理添加一个新元素。

关于c++ - priority_queue::emplace 调用 push_heap?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28120945/

相关文章:

c++ - 求 vector 的平均值

c++ - 未找到“llvm/IR/Constants.h”文件

c++ - 是否可以使用 clang-cl 在 Windows 上生成 .lib 文件?

sql-server - 添加 ORDER BY 语句时 SQL 查询很慢

javascript - 仅根据需要设置 contextmenu 属性是否更好?

.net - SCT到期后续订WCF客户端吗?

c++ - 如何对 float 的多维 vector 进行排序?

python - 类型错误 : '<' not supported between instances of 'State' and 'State' PYTHON 3

c++ - 如何在 Omnet++ 中将 cQueue 实现为优先级队列?

c++ - OpenGL/GLUT 我的光照方法正确吗?