【发布时间】:2013-02-12 14:28:33
【问题描述】:
我了解到emplace_back 方法将对象推送到向量中而无需临时创建对象。但是,我找不到使用push 或emplace 为priority_queue 实现此目的的方法。有没有一种有效的方法来实现这一目标?或者使用 boost 的 shared_ptr 之类的容器在性能方面很好。
【问题讨论】:
-
我不关注。
std::priority_queue::emplace应该将其参数转发到底层容器emplace_back。您使用的是哪个编译器/版本?请注意,虽然没有创建临时对象,但为了维护堆,将会发生大量交换。 -
那么,你知道玩 stl 容器最有效的方法是什么吗?即推送、弹出等。就性能而言,Boost 是不是最好的?
-
@IanDecks 嗯?你需要一个基于堆的优先级队列(O(logn) 插入和删除,不更新优先级),使用
std::priority_queue,你想在不创建临时对象的情况下将东西推入其中,使用emplace而不是push。所以呢?想做一些完全不同的事情,然后做一些完全不同的事情,忘记std::priority_queue。
标签: c++ performance stl containers copy-constructor