2016-12-02 1 views
1

Ich habe einen Container, der A-s enthält.Suchen Sie eine bestimmte Implementierung in einem generischen Container

B, C, D, E, ... implementieren A.

Was ist der effizienteste & sicherste Weg, zum Beispiel Objekt des ersten C zu finden? (also die ersten Objekte, deren Typ ist C)

Ich dachte über ungeordnete_map mit < string, A> aber Zeichenfolgen sind nicht sehr sicher, weil sie nur Laufzeit überprüft werden.

+0

Meinten Sie betrachten das erste Element von * type * 'C'? Oder erstes Element * mit * 'C'? –

+0

Und was wollen Sie damit erreichen? Was ist das * tatsächliche * und * ursprüngliche * Problem, das du lösen willst? Kann es nicht mit virtuellen Funktionen und Polymorphie gelöst werden? Zu guter Letzt noch etwas über das XY-Problem (http://xyproblem.info/). –

+0

Entschuldigung. Ich möchte ein Komponentensystem für eine Entität implementieren. Und ich möchte auf eine bestimmte Komponente der Entität zugreifen. – Tudvari

Antwort

1

Die einzige Möglichkeit zu wissen, welcher Weg effizienter ist, ist es, es auf Ihrer Plattform zu testen und die Zeiten zu messen, um verschiedene Lösungswege zu vergleichen.

Ich verwende zum Beispiel die Verwendung von enums, um die Suche und Indizierung des Baumes zu beschleunigen.

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

Der Behälter sollte vielleicht sein: finden

unordered_map < objType, A* > 

Aber wenn Sie mehr als ein Objekt eines Typs speichern müssen, shuld Sie von multimap

unordered_multimap < objType, A* > 
+1

Anstelle einer Aufzählung würde ich 'std :: type_index' vorschlagen. – user2079303

+0

Und was, wenn ich 2 B-s speichern möchte? Es gäbe 2 Werte mit demselben Schlüssel. Ist das möglich? – Tudvari

+0

Sie sind richtig, http://www.cplusplus.com/reference/unordered_map/unordered_map/ Containereigenschaften, "Keine zwei Elemente im Container können äquivalente Schlüssel haben." Vielleicht könnten Sie einen anderen Container oder einen verschachtelten Container für alle Ihre B-s verwenden. – Rama

Verwandte Themen