2016-12-02 5 views
1

私はA-sを含むコンテナを持っています。ジェネリックコンテナ内の特定の実装を見つける

B、C、D、E、... A.を実装

例えば最初のCのオブジェクトを見つけるの最も効率的な&最も安全な方法は何ですか? (最初のオブジェクトの型がCのもの)

<という文字列でunordered_mapを考えましたが、文字列はチェックされているランタイムであるため安全ではありません。

+0

の使用を考慮shuldあなたは見つけることを意味します* type * 'C'の最初の要素ですか?または、* Cを含む最初の要素*? –

+0

これで何を達成したいのですか?あなたが解決したい*実際の*と*元の*問題は何ですか?仮想関数と多相で解決できないのですか?最後に、XY問題に関する関連記事(http://xyproblem.info/)。 –

+0

申し訳ありません。エンティティにコンポーネントシステムを実装したいと思います。エンティティの特定のコンポーネントにアクセスしたいと思います。 – Tudvari

答えて

1

より効果的な方法を知る唯一の方法は、プラットフォーム上でテストし、時間を測定し、それを解決するさまざまな方法を比較することです。

たとえば、木の検索と索引付けを高速化するために列挙型を使用することをお勧めします。

enum objType 
{ 
    A = 1, 
    B, 
    C, 
    D 
}; 

コンテナは多分次のようになります。

unordered_map < objType, A* > 

しかし、あなたはタイプの複数のオブジェクトを格納する必要がある場合、あなたはマルチマップ

unordered_multimap < objType, A* > 
+1

enumの代わりに 'std :: type_index'を提案します。 – user2079303

+0

2台のB-Sを保管したいのですが?同じキーで2つの値があります。それは可能ですか? – Tudvari

+0

あなたは厳格です、http://www.cplusplus.com/reference/unordered_map/unordered_map/コンテナのプロパティは、 "コンテナ内の2つの要素は同等のキーを持つことができません。たぶん、別のコンテナ、またはすべてのB-Sにネストされたコンテナを使用できます。 – Rama

関連する問題