0

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

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

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

4

1 回答 1

3

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

于 2015-01-24T00:32:51.290 回答