c ++ priority_queue push / emplace没有临时对象创建

时间:2013-02-12 14:28:33

标签: c++ performance stl containers copy-constructor

我了解到emplace_back方法将对象推送到向量而不创建临时对象。但是,我无法使用pushemplace为priority_queue找到实现此目的的方法。有没有一种有效的方法来实现这一目标?或者使用boost的shared_ptr类容器在性能方面是好的。

1 个答案:

答案 0 :(得分:2)

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

当然,您无法将任何内容放入队列中的任意位置(并且您的推送元素不一定会在容器的末尾结束),因为它是优先级队列维护和内部顺序。但是,如果这就是你想要做的,那么你选择了错误的容器(或容器适配器)。

不,如果它仅仅是关于绩效而不是关于终身管理,很少是shared_ptr可行的替代方案。您是否需要动态内存分配,因此这不是一个选项,尤其是在C ++ 11中。