it-swarm.com.de

Was bedeutet Iterator-> Sekunde?

Was ist der Typ eines std::map<>::iterator In C++?

Wir wissen, dass ein Objekt it vom Typ std::map<A,B>::iterator Einen überladenen operator -> Hat, der einen std::pair<A,B>* Zurückgibt, und dass der std::pair<> Einen first und second Mitglied.

Aber was entsprechen diese beiden Elemente und warum müssen wir auf den in der Map gespeicherten Wert als it->second Zugreifen?

142
Noich

Ich bin sicher, Sie wissen, dass ein std::vector<X> Eine ganze Reihe von X Objekten speichert, oder? Wenn Sie jedoch einen std::map<X, Y> Haben, werden tatsächlich eine ganze Reihe von std::pair<const X, Y> Gespeichert. Genau das ist eine Karte - sie verbindet die Schlüssel und die zugehörigen Werte.

Wenn Sie über einen std::map Iterieren, iterieren Sie über alle diese std::pair. Wenn Sie einen dieser Iteratoren dereferenzieren, erhalten Sie einen std::pair, Der den Schlüssel und den zugehörigen Wert enthält.

std::map<std::string, int> m = /* fill it */;
auto it = m.begin();

Wenn Sie jetzt *it Eingeben, erhalten Sie den std::pair Für das erste Element in der Karte.

Mit dem Typ std::pair haben Sie über zwei Member Zugriff auf seine Elemente: first und second. Wenn Sie also einen std::pair<X, Y> Mit dem Namen p haben, ist p.first Ein X -Objekt und p.second Ist ein Y -Objekt .

Jetzt wissen Sie also, dass die Dereferenzierung eines Iterators std::map Ihnen einen std::pair Gibt. Sie können dann mit first und second auf seine Elemente zugreifen. Zum Beispiel, (*it).first Gibt Ihnen den Schlüssel und (*it).second Gibt Ihnen den Wert. Dies entspricht it->first Und it->second.

218

Die Art der Elemente eines std::map (das ist auch der Typ eines Ausdrucks, der durch Dereferenzieren eines Iterators dieser Map erhalten wird), dessen Schlüssel K ist und dessen Wert V ist std::pair<const K, V> - Der Schlüssel ist const, um zu verhindern, dass Sie die interne Sortierung von Kartenwerten stören.

std::pair<> hat zwei Mitglieder mit den Namen first und second (siehe hier ), mit einer ziemlich intuitiven Bedeutung. Wenn also ein Iterator i auf eine bestimmte Map gegeben wird, lautet der Ausdruck:

i->first

Welches ist gleichbedeutend mit:

(*i).first

Bezieht sich auf das erste (const) Element des pair Objekts, auf das der Iterator zeigt - dh es bezieht sich auf Ein Schlüssel in der Karte. Stattdessen lautet der Ausdruck:

i->second

Welches ist gleichbedeutend mit:

(*i).second

Bezieht sich auf das zweite Element des pair - dh auf den entsprechenden Wert in der Karte.

14
Andy Prowl