priority_queue::emplace 班级 push_heap?

priority_queue::emplace calls push_heap?

根据 CPP Referencestd::priority_queue::emplace "effectively calls"

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

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

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