c++优先级队列推送/模板,而不创建临时对象

c++ priority_queue push/emplace without temporary object creation

本文关键字:创建 临时对象 模板 优先级 队列 c++      更新时间:2023-10-16

我了解到emplace_back方法在不创建临时对象的情况下将对象推入向量。然而,对于priority_queue,无论是使用push还是emplace,我都找不到实现这一点的方法。有没有有效的方法来实现这一点?或者使用boost的类似sharedptr的容器在性能方面是好的。

std::priority_queue只是一个容器适配器,它用堆操作包装底层容器(默认为std::vector)。因此,为了在不创建临时的情况下将某些内容push放入其中,那么std::priority_queue::emplace正是您想要使用的。

当然,您不能将任何东西放置在队列的任意位置(您的推送元素也不一定会出现在容器的末尾),因为它是一个维护内部顺序的优先级队列。但是,如果这是您想要做的,那么无论如何,您选择了错误的容器(或容器适配器)。

不,shared_ptr很少是一个可行的替代方案,如果它只是关于性能而不是生命周期管理。要么你需要动态内存分配,要么不需要,所以这不是一个选项,尤其是在C++11中。