ベクトルから複数のアイテムを削除する最も効率的な方法を探していますか?
基本的に、ベクター内のフラグを検索し、そのフラグを持つオブジェクトを削除します。
ただし、ベクトルからオブジェクトを消去するとイテレータが台無しになると聞いたので、ベクトル(数千のオブジェクトを含む可能性がある)をループして特定のフラグを持つオブジェクトを削除する最も効率的な方法は何ですか?
ベクトルを何度もループする必要がないことを望んでいます。
フラグに一致する要素が複数ある場合は、次を使用する必要がありますstd::remove_if()
。
vec.erase(std::remove_if(vec.begin(), v.end(), [](T const& e){ return e.flag(); }),
v.end());
このアプローチを使用すると、各ベクトル要素が最大で1回移動します。個々の要素を削除すると、各要素がO(n)
何度も移動する場合があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加