Bereichsbasierte for()-Schleifen mit std::map verwenden
Bereichsbasierte for()-Schleifen in C 11 und höher bieten eine bequeme Möglichkeit, über Container zu iterieren. Während Beispiele oft einfache Container wie Vektoren zeigen, kommt es zu Verwirrung, wenn sie mit komplexeren Datenstrukturen wie Karten verwendet werden.
Bei Verwendung einer bereichsbasierten for()-Schleife mit einer Karte ist der Elementtyp nicht so einfach wie es scheint. Betrachten Sie das folgende Beispiel:
<code class="cpp">std::map<foo, bar> testing = { /*...blah...*/ }; for (auto abc : testing) { std::cout << abc << std::endl; // ? should this give a foo? a bar? std::cout << abc->first << std::endl; // ? or is abc an iterator? }
Im Gegensatz zu Vektoren, bei denen die Schleifenvariable der Typ des Containerelements ist (z. B. int), ist die Schleifenvariable abc für eine Karte tatsächlich vom Typ std::pair< ;const foo, bar>. Das bedeutet, dass abc ein Paar enthält, das sowohl den Schlüssel als auch den Wert der Karte enthält.
In C 17 und höher können Sie über strukturierte Bindungen direkt auf den Schlüssel und den Wert zugreifen:
<code class="cpp">for (auto& [key, value] : myMap) { std::cout << key << " has value " << value << std::endl; }</code>
In C 11 und C 14 können Sie immer noch mit der erweiterten for-Schleife über die Karte iterieren, aber Sie müssen den Schlüssel und den Wert manuell extrahieren:
<code class="cpp">for (const auto& kv : myMap) { std::cout << kv.first << " has value " << kv.second << std::endl; }</code>
Es ist wichtig zu verstehen, dass die Schleifenvariable abc oder kv ist in diesen Beispielen kein Iterator. Stattdessen stellt es eine Kopie des Paares dar, das den Schlüssel und den Wert des aktuellen Kartenelements enthält. Diese Unterscheidung ist entscheidend, wenn Änderungen oder Verweise auf die Kartenelemente innerhalb der Schleife berücksichtigt werden.
Das obige ist der detaillierte Inhalt vonWie funktionieren bereichsbasierte for()-Schleifen mit std::map in C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!