2016-10-31 4 views
1

私は小さなゲームを作っています。私は世界のすべてのエンタテイを格納するためのコンテナとしてベクトルを使用しようとしています。しかし、頻繁にエントリーを挿入したり削除したりする方法が必要です。 は、私は現在のエンティティを削除するには、これを使用しています:ベクトルを使ってエンティティを格納する

std::swap(m_entities[index], m_entities.back()); m_entities.pop_back();

しかし項目は、私が誤ってアイテムを削除しようとする場合、それがクラッシュしたので、存在する場合、私はチェックの方法がありません。また、インデックスはエンティティに格納されるので、インデックスはスワップされたエンティティに対して無効になります。 代わりにunordered_mapを使用する必要がありますか?

+1

あなただけ使用することができます 'ベクトル::消去()'。 P.S.私はあなたのユーザー名が好きです。 – SingerOfTheFall

+0

'vector :: erase'はより健全ですが、あなたが境界にあることをテストしたいときは' vector :: at'を見てください。または、単にif(index user4581301

+0

ベクトルはゲームが発生する多数の挿入/削除のために正しいコンテナではないかもしれません。これは、[vector](http://www.cplusplus.com/reference/vector/vector/erase/)が必ず連続したデータを持つようにしなければならないためです(古いC配列のようにアクセスできるようにする必要があります) 。オブジェクトのコンストラクタであるオブジェクトの配列にオブジェクトを格納するための関連する質問(http://stackoverflow.com/questions/)への私の答えを見ているかもしれません。 25838551) – NGI

答えて

関連する問題