根据CPP Reference,std::priority_queue::emplace
“有效地调用”
c.emplace_back(std::forward<Args>(args)...);
std::push_heap(c.begin(), c.end(), comp);
“有效”是什么意思?这是否意味着emplace
具有与这些调用相同的功能,或者emplace
实际上是使用这些调用实现的(我的理解是实现留给编译器)。如果emplace
按字面意思实现,那么效率不高吗?如果我向现有堆添加一个元素,我不需要堆积整个堆。
答案 0 :(得分:3)
实现当然不必调用算法,但可能确实如此。在emplacing()
元素之后,它将向根移动,直到恢复堆不变量。请注意,push_heap()
不触及整个堆:那将是make_heap()
。相反,push_heap()
仅处理添加一个新元素。