我了解到emplace_back
方法将对象推入 vector ,而无需临时创建对象。但是,我找不到使用push
或emplace
来实现priority_queue的方法。有没有有效的方法来实现这一目标?或使用boost的shared_ptr之类的容器在性能方面都不错。
最佳答案
std::priority_queue
只是一个容器适配器,它通过堆操作包装基础容器(默认情况下为std::vector
)。因此,为了在其中创建push
而不创建临时文件,那么 std::priority_queue::emplace
正是您要使用的。
当然,您不能将任何东西放入队列中的任意位置(并且您的下推元素不一定要在容器的末尾结束),因为这是维护和内部顺序的优先级队列。但是,好吧,如果这就是您要执行的操作,那么您还是选择了错误的容器(或容器适配器)。
不,如果shared_ptr
仅与性能有关,而不与生命周期管理有关,那么它很少是可行的选择。您是否需要动态内存分配,所以这将不是一个选择,尤其是在C++ 11中。
关于c++ - 没有临时对象创建的c++ priority_queue push/emplace,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14834811/