priority_queue::emplace 班级 push_heap?
priority_queue::emplace calls push_heap?
根据 CPP Reference、std::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()
只处理添加一个新元素。
根据 CPP Reference、std::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()
只处理添加一个新元素。