Maison  >  Article  >  développement back-end  >  Comment convertir efficacement des chaînes en énumérations en C ?

Comment convertir efficacement des chaînes en énumérations en C ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-11 01:55:02499parcourir

How to Efficiently Convert Strings to Enums in C  ?

Conversion efficace des chaînes en énumérations en C

Lorsque vous travaillez avec des énumérations en C, vous pouvez rencontrer le besoin de convertir les chaînes en leurs correspondantes énumérer les valeurs. Même si une instruction switch peut suffire, elle peut devenir fastidieuse avec de nombreuses valeurs d'énumération. Cet article explore des approches alternatives pour une conversion efficace de chaîne en énumération.

Solution std::map

Une approche consiste à créer un std::map ou std :: unordered_map. Remplir la carte avec des paires clé-valeur de chaînes et de valeurs d'énumération est simple, permettant une recherche rapide. Cependant, cette méthode partage la complexité d'une instruction switch.

C 11 Syntactic Sugar

Pour C 11 et versions ultérieures, une solution plus concise devient disponible. En utilisant std::unordered_map initialisé statiquement, vous pouvez remplir la carte avec élégance en utilisant des accolades :

static std::unordered_map<std::string,E> const table = { {"a",E::a}, {"b",E::b} };

Pour effectuer la recherche, utilisez simplement la méthode find() sur la table et vérifiez si l'itérateur est valide. S'il est trouvé, vous pouvez récupérer directement la valeur enum correspondante.

Exemple

Par exemple, considérons la déclaration enum suivante :

enum class E { a, b, c };

Et une chaîne "a", vous pouvez la convertir en la valeur enum correspondante à l'aide du tableau :

auto it = table.find("a");
if (it != table.end()) {
  E result = it->second;
  // ...
}

Cette approche fournit un aperçu concis et solution efficace pour convertir des chaînes en énumérations en C , réduisant ainsi la complexité des longues instructions switch.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn