2

emplace_backメソッドがオブジェクトを一時的に作成せずにベクトルにプッシュすることを学びました。pushただし、またはを使用してpriority_queueでこれを達成する方法を見つけることができませんでしたemplace。これを達成する効率的な方法はありますか?または、boost の shared_ptr のようなコンテナーを使用すると、パフォーマンスが向上します。

4

1 に答える 1

2

Aは、基礎となるコンテナ(デフォルト)をヒープ操作でstd::priority_queueラップする単なるコンテナアダプタです。std::vectorしたがってpush、一時的なものを作成せずに何かを入れるために、それstd::priority_queue::emplaceはまさにあなたが使用したいものです。

もちろん、キューの任意の位置に何かを配置することはできません(そして、プッシュされた要素が必ずしもコンテナの最後に到達する必要はありません)。これは、優先キューの維持と内部順序であるためです。しかし、それがあなたのやりたいことなら、とにかく間違ったコンテナ(またはコンテナアダプタ)を選んだのです。

そして、いいえ、shared_ptrそれが単にパフォーマンスに関するものであり、生涯管理に関するものではない場合、実行可能な代替案になることはめったにありません。特にC++11では、動的メモリ割り当てが必要かどうかにかかわらず、それはオプションではありません。

于 2013-02-12T15:16:56.030 に答える