C++ STL Carte vs Vecteur vitesse

Dans l'interpréteur de mes expériences de langage de programmation, j'ai une table de symboles. Chaque symbole est constitué d'un nom et d'une valeur (la valeur peut être par exemple: de type string, int, fonction, etc.).

Au début, j'ai représenté la table avec un vecteur et répétée à travers les symboles de vérifier si le nom de symbole équipée.

Puis je si à l'aide d'une carte, dans mon cas map<string,symbol>, serait mieux que de l'itération par le vecteur de tous les temps mais:

C'est un peu dur à expliquer cette partie, mais je vais essayer.

Si une variable est extrait la première fois dans un programme de ma langue, bien sûr, sa position dans la table des symboles doit être trouvé (à l'aide de vecteur de maintenant). Si je voulais parcourir le vecteur à chaque fois que la ligne est exécuté (pensez à une boucle), il serait terriblement lent (comme c'est le cas actuellement, presque aussi lent que microsoft lot).

Si je pouvais utiliser une carte pour récupérer la variable: SymbolTable[ myVar.Name ]

Mais pensez à ce qui suit: Si la variable, toujours à l'aide de vecteur est la première fois, je peux stocker son entier exact de la position dans le vecteur avec elle. C'est à dire: La prochaine fois que cela est nécessaire, mon interprète, qui sait qu'elle a été "mise en cache" et ne cherchent pas la table des symboles pour elle, mais fait quelque chose comme SymbolTable.at( myVar.CachedPosition ).

Maintenant mon (plutôt dur?) question:

  • Dois-je utiliser un vecteur pour la table de symbole avec la mise en cache de la position de la variable dans le vecteur?

  • Devrais-je plutôt utiliser une carte? Pourquoi? Quelle est la vitesse de l'opérateur []?

  • Dois-je utiliser quelque chose de complètement différent?

  • Juste un peu de nourriture pour la pensée, si vous stockez l'entier de la position de votre variable est à et certaines variables d'avant et qui obtient des ordures collectées ou supprimé, quel est votre plan pour que l'entier de cache de position?
InformationsquelleAutor sub | 2010-04-03