C ++ STL Map vs Vector Geschwindigkeit

Im Interpreter für meine experimentelle Programmiersprache habe ich eine Symboltabelle. Jedes Symbol besteht aus einem Namen und einem Wert (der Wert kann beispielsweise vom Typ string, int, function usw. Sei

uerst habe ich die Tabelle mit einem Vektor dargestellt und durch die Symbole iteriert, um zu überprüfen, ob der angegebene Symbolname pass

Dann benutze ich allerdings eine Karte, in meinem Fallmap<string,symbol>, wäre besser, als die ganze Zeit durch den Vektor zu iterierenabe:

Es ist ein bisschen schwer, diesen Teil zu erklären, aber ich werde es versuchen.

Wenn eine Variable zum ersten Mal in einem Programm in meiner Sprache abgerufen wird, muss natürlich ihre Position in der Symboltabelle gefunden werden (jetzt mit vector). Wenn ich den Vektor jedes Mal durchlaufen würde, wenn die Zeile ausgeführt wird (denken Sie an eine Schleife), wäre dies furchtbar langsam (so wie es derzeit ist, fast so langsam wie der Stapel von Microsoft).

So könnte ich eine Karte verwenden, um die Variable abzurufen:SymbolTable[ myVar.Name ]

Aber denken Sie an Folgendes: Wenn die Variable, die immer noch den Vektor verwendet, zum ersten Mal gefunden wird, kann ich damit ihre genaue ganzzahlige Position im Vektor speichern. Das heißt: Wenn es das nächste Mal benötigt wird, weiß mein Interpreter, dass es "zwischengespeichert" wurde und durchsucht die Symboltabelle nicht danach, sondern führt so etwas wie @ auSymbolTable.at( myVar.CachedPosition ).

Jetzt meine (eher schwierige?) Frage:

Sollte ich einen Vektor für die Symboltabelle zusammen mit dem Zwischenspeichern der Position der Variablen im Vektor verwenden?

Soll ich lieber eine Karte benutzen? Warum?Wie schnell ist der Operator []?

Sollte ich etwas ganz anderes verwenden?

Antworten auf die Frage(12)

Ihre Antwort auf die Frage