2016-03-28 12 views
3

n個以上の複雑さを抑えながら、ソートされたベクトルから要素を消去する必要があります。私はvector . eraseの方法を知っていますが、それを消去する方法はありますが、その複雑さはnです。私はちょうど最後の要素でその構造要素を書き換えることができますし、ポップバックを使用して定数でなければならない最後のメソッドを削除することができますが、それはソートされないので、私は再びそれを並べ替える必要があります。この問題を解決して複雑さを下回ることさえ可能ですか?<n個の複雑さを持つベクトルの要素を消去する

+0

できません。どちらかというと、別のデータ構造を使用するb))一括して要素​​を削除する(erase-removeイディオムを参照)c)要素を未使用のものとしてマークする – milleniumbug

+0

何らかの理由で未使用の要素をマークすると、 。 – kvway

+0

変更を行う前に、**パフォーマンスを測定する**ことを確認してください。現代のハードウェアでは、他のコンテナタイプよりも優れているため、驚くほど大きなNが必要になることがよくあります。 –

答えて

3

ソートが必要なので、std::vector(私が知る限り)の解決策はありません。しかし、std::vectorはあなたのケースに適したコンテナではないようです。 std::listはあなたのための1つのオプションです(より良いかもしれません)。この基準から

http://www.cplusplus.com/reference/list/list/erase/

複雑

消去された要素の数に線形(破壊)。

これは、デストラクタをN回呼び出すことを意味し、Nは削除されるアイテムの数です。したがって、データ構造をソートしたままで、高性能で要素を消去することができれば、削除された項目の数は直線的になります(std::listアイテム数ではなく)

+1

答えをありがとう。 – kvway

3

ベクトルを別のコンテナ(例えば、マルチセットなど)で置き換える方がよいでしょうか。

+0

セット/マルチセットを使用している@kvwayはおそらくあなたが必要とするものです。なぜならリストでは1つの要素にアクセスするコストがO(n)あるからです。 – ead

関連する問題