#include <algorithm> // std::transform
#include <iterator> // std::back_inserter
std::transform(
your_map.begin(),
your_map.end(),
std::back_inserter(your_values_vector),
[](auto &kv){ return kv.second;}
);
Es tut mir leid, dass ich keine Erklärung hinzugefügt habe - ich dachte, dass der Code so einfach ist, dass keine Erklärung erforderlich ist. So:
transform( beginInputRange, endInputRange, outputIterator, unaryOperation)
Diese Funktion ruft unaryOperationjedes Element aus dem inputIteratorBereich ( beginInputRange- endInputRange) auf. Der Wert der Operation wird in gespeichert outputIterator.
Wenn wir die gesamte Karte durcharbeiten möchten, verwenden wir map.begin () und map.end () als Eingabebereich. Wir möchten unsere Kartenwerte in einem Vektor speichern - daher müssen wir back_inserter für unseren Vektor verwenden : back_inserter(your_values_vector). Der back_inserter ist ein spezieller outputIterator, der neue Elemente am Ende einer bestimmten Sammlung (als Paremeter) pusht. Der letzte Parameter ist unaryOperation - es wird nur ein Parameter verwendet - der Wert von inputIterator. Wir können also Lambda: verwenden
[](auto &kv) { [...] }, wobei & kv nur eine Referenz auf das Paar des Kartenelements ist. Wenn wir also nur Werte von Kartenelementen zurückgeben möchten, können wir einfach kv.second zurückgeben:
[](auto &kv) { return kv.second; }
Ich denke, das erklärt alle Zweifel.