Abrufen des ersten Werts von der Karte in C ++

74

Ich benutze mapin C ++. Angenommen, ich habe 10 Werte in mapund möchte nur den ersten. Wie bekomme ich es?

Vielen Dank.

adir
quelle

Antworten:

114

Eine Karte behält die Einfügereihenfolge nicht bei. Verwenden Sie *(myMap.begin())diese Option , um den Wert des ersten Paares abzurufen (das mit dem kleinsten Schlüssel bei Bestellung).

Sie können auch myMap.begin()->firstden Schlüssel und myMap.begin()->secondden Wert ermitteln.

Benoit
quelle
1
myMap.begin()Gibt einen Iterator zurück. Vielleicht möchten Sie stackoverflow.com/questions/388242/…
MSalters
12
Nein, es werden Werte zurückgegeben. myMap.begin()ist ein Iterator, bei dem die Operatoren *und ->überladen sind, um sich wie ein Zeiger zu verhalten, und die Operatoren ++und --überladen sind, um Elemente in Ihrer Karte zu iterieren. Sie sollten eine Einführung über die STL lesen. Vielleicht hat jemand einen guten Link für dich?
Benoit
und wenn ich den Wert und nicht den Iterator will?
Adir
2
@adir: es wird im letzten Absatz erklärt.
Jweyrich
@ Benoit Hast du eine Vorstellung von der Art der ersten, zweiten Karte? Danke
RaHuL
12

So einfach wie:

your_map.begin()->first // key
your_map.begin()->second // value
jweyrich
quelle
6

begin()gibt das erste Paar zurück (genau, ein Iterator zum ersten Paar, und Sie können auf den Schlüssel / Wert als ->firstund ->secondvon diesem Iterator zugreifen )

Nim
quelle
5

Sie können den Iterator verwenden, der von der begin () -Methode der Kartenvorlage zurückgegeben wird:

std::map<K,V> myMap;
std::pair<K,V> firstEntry = *myMap.begin()

Denken Sie jedoch daran, dass der std :: map-Container seinen Inhalt in geordneter Weise speichert. Der erste Eintrag ist also nicht immer der erste Eintrag, der hinzugefügt wurde.

Marcus Gründler
quelle
1
Im Gegenteil: Es speichert seinen Inhalt in einer geordneten Weise, basierend auf Vergleichen der Schlüssel!
Oliver Charlesworth
1
Ja Leute, Sie haben absolut Recht. Es wird nach Schlüsselreihenfolge bestellt. Was ich damit sagen wollte ist, dass die Reihenfolge des Einfügens nicht beibehalten wird, dh der erste hinzugefügte Eintrag zur Karte ist nicht unbedingt der am Anfang () .
Marcus Gründler