Heim  >  Artikel  >  Backend-Entwicklung  >  Wie konvertiert man Strings in C effizient in Enums?

Wie konvertiert man Strings in C effizient in Enums?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-11 01:55:02526Durchsuche

How to Efficiently Convert Strings to Enums in C  ?

Effiziente Konvertierung von Strings in Aufzählungen in C

Bei der Arbeit mit Aufzählungen in C müssen Sie möglicherweise Strings in die entsprechenden umwandeln Enum-Werte. Während eine Switch-Anweisung ausreichen kann, kann sie bei zahlreichen Enum-Werten umständlich werden. In diesem Artikel werden alternative Ansätze für eine effiziente String-zu-Enum-Konvertierung untersucht.

std::map-Lösung

Ein Ansatz besteht darin, eine std::map oder std::unordered_map. Das Füllen der Karte mit Schlüssel-Wert-Paaren aus Zeichenfolgen und Aufzählungswerten ist unkompliziert und ermöglicht eine schnelle Suche. Allerdings ist diese Methode genauso komplex wie eine Switch-Anweisung.

C 11 Syntactic Sugar

Für C 11 und höher steht eine prägnantere Lösung zur Verfügung. Mit statisch initialisiertem std::unordered_map können Sie die Karte elegant mit geschweiften Klammern füllen:

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

Um die Suche durchzuführen, verwenden Sie einfach die Methode find() für die Tabelle und prüfen Sie, ob der Iterator gültig ist. Wenn gefunden, können Sie den entsprechenden Enum-Wert direkt abrufen.

Beispiel

Betrachten Sie beispielsweise die folgende Enum-Deklaration:

enum class E { a, b, c };

Und Eine Zeichenfolge „a“ können Sie mithilfe der Tabelle in den entsprechenden Enum-Wert umwandeln:

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

Dieser Ansatz liefert a Prägnante und effiziente Lösung zum Konvertieren von Zeichenfolgen in Aufzählungen in C, wodurch die Komplexität langer Switch-Anweisungen verringert wird.

Das obige ist der detaillierte Inhalt vonWie konvertiert man Strings in C effizient in Enums?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn