我了解到emplace_back
方法将对象推送到向量而不创建临时对象。但是,我无法使用push
或emplace
为priority_queue找到实现此目的的方法。有没有一种有效的方法来实现这一目标?或者使用boost的shared_ptr类容器在性能方面是好的。
答案 0 :(得分:2)
std::priority_queue
只是一个容器适配器,它使用堆操作包装底层容器(默认情况下为std::vector
)。因此,为了push
在不创建临时内容的情况下,std::priority_queue::emplace
正是您想要使用的内容。
当然,您无法将任何内容放入队列中的任意位置(并且您的推送元素不一定会在容器的末尾结束),因为它是优先级队列维护和内部顺序。但是,如果这就是你想要做的,那么你选择了错误的容器(或容器适配器)。
不,如果它仅仅是关于绩效而不是关于终身管理,很少是shared_ptr
可行的替代方案。您是否需要动态内存分配,因此这不是一个选项,尤其是在C ++ 11中。