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