Souvent j'ai besoin de choisir quoi faire en fonction de la valeur de non-POD élément constant, quelque chose comme ceci:
switch( str ) {
case "foo": ...
case "bar": ...
default: ...
}
Malheureusement, switch
peut être utilisé uniquement avec des entiers: error: switch quantity not an integer
.
Les plus triviaux de la façon de mettre en œuvre une telle chose est d'avoir une séquence de if
s:
if( str == "foo" ) ...
else if( str == "bar" ) ...
else ...
Mais cette solution a l'air sale, et le prix est de O(n), où n est le nombre de cas, alors que ce morceau de code pourrait coûter O(log n) dans le pire des cas avec une recherche binaire.
À l'aide de certaines données des structures (comme les Cartes), il pourrait être possible d'obtenir un nombre entier représentant la chaîne ( O(log n) ), et ensuite utiliser un O(1) switch
, ou l'on pourrait mettre en œuvre un binaire statique trier par imbrication if
s dans le droit chemin, mais encore ces hacks exigerait beaucoup de codage, rendant le tout plus complexe et plus difficile à maintenir.
Quelle est la meilleure façon de le faire? (rapide, propre et simple, comme l' switch
déclaration est)