根据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/