Ich bin sicher, Sie wissen, dass ein std::vector<X>eine ganze Reihe von XObjekten speichert , oder? Aber wenn Sie eine haben std::map<X, Y>, speichert sie tatsächlich eine ganze Reihe von std::pair<const X, Y>s. Genau das ist eine Karte - sie verbindet die Schlüssel und die zugehörigen Werte.
Wenn Sie über a iterieren std::map, iterieren Sie über alle diese std::pairs. 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 dies jetzt tun *it, erhalten Sie das std::pairfür das erste Element in der Karte.
Jetzt std::pairgibt Ihnen der Typ über zwei Elemente Zugriff auf seine Elemente: firstund second. Wenn Sie also einen std::pair<X, Y>Anruf haben p, p.firstist dies ein XObjekt und p.secondein YObjekt.
Jetzt wissen Sie also, dass Sie durch die Dereferenzierung eines std::mapIterators eine erhalten std::pair. Anschließend können Sie mit firstund auf seine Elemente zugreifensecond . Zum Beispiel (*it).firstwerden Sie den Schlüssel geben und (*it).secondwerden Sie den Wert geben. Diese sind äquivalent zu it->firstund it->second.
std::mapspeichert einen Schlüssel und einen Wert .map::iterator.secondbezieht sich auf den Wert .