A table de saut est une structure abstraite utilisée pour contrôle des transferts à un autre endroit. Goto, continue, et break sont similaires, sauf qu'ils transfèrent toujours vers un emplacement spécifique au lieu d'une possibilité parmi plusieurs. En particulier, ce flux de contrôle n'est pas le même qu'un appel de fonction. (L'article de Wikipedia sur tables de branchement est lié).
A déclaration de commutation est comment écrire des tables de saut en C/C++. Seule une forme limitée est fournie (peut seulement commuter sur les types intégraux) pour rendre les implémentations plus faciles et plus rapides dans ce cas commun. (La manière d'implémenter efficacement les tables de saut a été étudiée beaucoup plus pour les types intégraux que pour le cas général). Un exemple classique est Dispositif de Duff .
Cependant, la capacité totale d'une table de saut n'est souvent pas requise comme lorsque chaque cas aurait une déclaration de rupture. Ces "tables de saut limitées" sont une schéma différent qui ne fait que profiter de l'efficacité bien étudiée d'une table de saut, et sont courantes lorsque chaque "action" est indépendante des autres.
Les implémentations réelles des tables de saut prennent différentes formes, qui diffèrent principalement dans la façon dont le mappage de la clé à l'index est effectué. C'est dans cette mise en correspondance qu'interviennent des termes comme "dictionnaire" et "table de hachage", et ces techniques peuvent être utilisées indépendamment d'une table de saut. Dire qu'un code "utilise une table de saut" n'implique pas en soi que vous avez une recherche O(1).
Le compilateur est libre de choisir la méthode de recherche pour chaque instruction switch, et il n'y a aucune garantie que vous obtiendrez une implémentation particulière ; cependant, les options du compilateur telles que l'optimisation pour la vitesse et l'optimisation pour la taille doivent être prises en compte.
Vous devez envisager d'étudier les structures de données pour appréhender les différentes exigences de complexité qu'ils imposent. En bref, si par "dictionnaire" vous entendez un arbre binaire équilibré, alors il est O(log n) ; et une table de hachage dépend de sa fonction de hachage et de sa stratégie de collision. Dans le cas particulier des instructions switch, puisque le compilateur dispose de toutes les informations, il peut générer un dictionnaire O(log n). fonction de hachage parfaite ce qui signifie une recherche O(1). Cependant, ne vous perdez pas en regardant uniquement la complexité algorithmique globale : cela cache des facteurs importants.