priority_queue :: emplace调用push_heap?

时间:2015-01-24 00:29:34

标签: c++ performance priority-queue emplace

根据CPP Referencestd::priority_queue::emplace“有效地调用”

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

“有效”是什么意思?这是否意味着emplace具有与这些调用相同的功能,或者emplace实际上是使用这些调用实现的(我的理解是实现留给编译器)。如果emplace按字面意思实现,那么效率不高吗?如果我向现有堆添加一个元素,我不需要堆积整个堆。

1 个答案:

答案 0 :(得分:3)

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