Sie einen Vektor von Vektoren in diesem Fall können Sie Ihre Auswahl an Tasten, da begrenzt:
vector<vector<MyType> > container(128);
Nun können Sie die richtigen Container zugreifen, indem Sie die eingegebenen Zeichen als Schlüssel:
MyType myTypeInstance;
char input = 'a';
container[input].push_back(myTypeInstance);
Dies sollte schneller sein als mit einem std::map (dh map<char, MyType>
), erfordert aber die Zuweisung von allen möglichen Container im Vordergrund. Es verschwendet auch Platz mit den nicht druckbaren Zeichen im Bereich von 0 bis 31. Das letztere Problem könnte adressiert werden, indem nur 96 Werte zugewiesen und 32 von der Benutzereingabe subtrahiert werden.
Abhängig von der Komplexität des Typs in Ihrem inneren Container, ist es möglicherweise vorzuziehen, Zeiger (oder einen Smart-Zeiger wie boost::shared_ptr) zu speichern, statt nach Wert zu speichern.
vector<vector<shared_ptr<MyType> > > container(96);
Beachten Sie, dass, wenn Sie rohe Zeiger tun verwenden Sie müssen sicher sein, Elemente zu löschen, da sie nicht durch den Vektor wiedergewonnen werden.
Wenn es ein einzelner Buchstabe ist: std :: map> noch besser - verwenden Sie einfach c-Array mit und machen Sie diesen Buchstaben zu einem Index. –
Drakosha
Verwenden Sie char * nicht als Schlüssel für eine Karte. Verwenden Sie std :: string. Ich glaube nicht, dass die Zeigerreihenfolge das ist, was Sie wollen. –
Die Zeigerreihenfolge ist kein allzu großes Problem (es sei denn, sie kümmern sich wirklich um die Reihenfolge, in der sie gespeichert sind und/oder versuchen, sie zu sortieren) ... wichtiger ist, dass Sie char * nicht wollen, denn das wird nur sein Gleich, wenn * genau die gleiche Zeichenkette * (dh der gleiche Speicher) als Schlüssel verwendet wird, anstatt zwei Zeichenketten, die gleich sind, aber in verschiedenen Speicherbereichen gespeichert sind. – workmad3