J'ai développé un moteur de script qui a de nombreuses fonctions intégrées, donc pour appeler n'importe quelle fonction, mon code est entré dans un mur if .. else if .. else if
en vérifiant le nom mais je voudrais développer une solution plus efficace .Utilisation d'une carte STL de pointeurs de fonction
Dois-je utiliser un hashmap avec des chaînes comme clés et des pointeurs comme valeurs? Comment pourrais-je le faire en utilisant une carte STL?
EDIT: Un autre point qui est venu dans mon esprit: bien sûr en utilisant une carte forcera le compilateur de ne pas les fonctions inline, mais mon approche inefficace n'avait pas de frais généraux générés par la nécessité des appels de fonction, il juste exécute le code. Donc je me demande si le surcoût généré par l'appel de la fonction sera meilleur que d'avoir une chaîne if..else
.. sinon je pourrais minimiser le nombre de comparaisons en vérifiant un caractère à l'exécution (sera plus long mais plus rapide).
De même, il n'est pas vraiment nécessaire d'utiliser une vraie table de hachage comme 'unordered_map'. Il n'y aura pas autant d'éléments qu'une table de hachage apporterait des avantages de performance, je ne serais même pas surpris si 'map' était plus rapide dans ce cas. – sth
En fait, j'ai fait des choses similaires et 'unordered_map' était * beaucoup * plus rapide. Je n'avais qu'environ 10 000 choses, et j'ai profilé 'map' et' unordered_map'. – GManNickG
Je m'attendrais '' "beaucoup de fonctions intégrées" << 10.000'. Hasmap dans le cas de l'OP a l'avantage clair d'être "vrai O (1)" car il n'a pas à croître, et un hachage sans collision pourrait être construit pour les cordes. Je doute que cela fasse une différence * significative * par rapport à une carte pour seulement quelques centaines d'objets. – peterchen