2011-07-31 15 views
5

私のゲームでは、オブジェクトがセンサーに入ると、それをリストに追加する必要があり、オブジェクトがセンサーを離れるときにはそのリストから削除する必要があります。私もすぐにそのオブジェクトを見つけることができる必要があります。だから、基本的にこれにはどのデータ構造が最適でしょうか?

私はそれを実行する必要があります。 素早く追加して、迅速な除去とクイックファインド。任意の時点で、stucture約10個のオブジェクトを持つことになりますことを考えると、このための最善のだろうデータ構造のどのような

おかげで10何個のがどうなるオブジェクト(std::vectordequeまたはset)、およびプロファイリングの前に、より良い実行する1伝えることができます誰で

+0

>すばやく追加したり、すばやく削除したり、すばやく見つけることができます。 QuickStructは行く方法です – unkulunkulu

+0

QuickStructは正確に何ですか? – jahhaj

+1

虚数理想的なデータ構造。 – unkulunkulu

答えて

9

使用するかわからない場合は、おそらくあなたはstd::setの要素を検索するためのよりよい構文を持っていることがわかります。これは私がこのような状況で使用するものです。std::find(v.begin(), v.end(), sensor)を書くのは好きではないので、私は単純にs.find(sensor)と書くことができます。

は、一般的なアドバイスとして、しかしstd::listを使用しないでください。 C++でリンクリストを使用する魅力的な理由が必要です(一定時間のスプライシングは1つで、イテレータの無効化の欠如は別のものです)。他のデータ構造は、ほとんどの操作(スプライシングを除く)ではより優れたパフォーマンスを発揮します。ここでは、例えば、listを使用しているのではない。 set

+0

リストに関する良いアドバイス。 –

+0

セットは、ルックアップの速度は良いですが、要素の挿入と削除はリストと同じくらい速くはありません。どの操作がより頻繁に実行されるかを考慮する必要があります。 – neodelphi

+2

@ neodelphi:挿入または削除する場所が*リスト上よりもセットで速いことを知る*。だから私はあなたのようなカテゴリーにはならないだろう。さらに、10要素のベクトルの挿入と削除は、リストよりもはるかに高速になる可能性があります(データローカリティの理由で)。どのコンテナの方が性能が良いのかははっきりしませんが、 'std :: list'が遅れていると強く信じています。全体のパフォーマンスが非常に悪いので、必要な場合にのみリストを使用するように強制するのは良い考えです。 –

0

削除迅速かつ迅速な発見、追加クイック、あなたは多くはあなたがしたくありません!あなたが言ったことを考えると、私はリンクされたリストを言うだろうが、それはまた、追加、削除、および発見の頻度に依存する。追加や削除よりもはるかに頻繁に見つかった場合は、変更されます。

本当に唯一の方法は、いくつかの異なる選択肢を試してみることです。

0

リンクリストが最適だろうと思います。小さなサイズが与えられた場合、ポインタを移動することはパフォーマンスに影響を与えません。

1

それが完全に挿入し、要素の除去のために適合されているので、私はstd::listをお勧めします。

+1

では検索できません。 –

+0

私はそれが要素の挿入のために良いと言うことさえないでしょう。それはかなり遅いです。 – GManNickG

+0

なぜあなたはそれが遅いと言いますか? – neodelphi

関連する問題