Heim > Backend-Entwicklung > C++ > Hauptteil

Wie funktionieren bereichsbasierte for()-Schleifen mit std::map in C?

Linda Hamilton
Freigeben: 2024-10-29 03:27:29
Original
1069 Leute haben es durchsucht

 How do Range-Based for() Loops Work with std::map in C  ?

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?
}
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage