#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;}
);
Mi dispiace di non aver aggiunto alcuna spiegazione, pensavo che il codice fosse così semplice che non richiede alcuna spiegazione. Così:
transform( beginInputRange, endInputRange, outputIterator, unaryOperation)
questa funzione chiama unaryOperation
ogni elemento dall'intervallo inputIterator
( beginInputRange
- endInputRange
). Il valore dell'operazione viene memorizzato in outputIterator
.
Se vogliamo operare attraverso l'intera mappa, usiamo map.begin () e map.end () come nostro intervallo di input. Vogliamo archiviare i nostri valori della mappa in vector - quindi dobbiamo usare back_inserter sul nostro vettore: back_inserter(your_values_vector)
. Il back_inserter è uno speciale outputIterator che inserisce nuovi elementi alla fine di una data raccolta (come paremetro). L'ultimo parametro è unaryOperation - richiede un solo parametro - il valore di inputIterator. Quindi possiamo usare lambda:,
[](auto &kv) { [...] }
dove & kv è solo un riferimento alla coppia di elementi della mappa. Quindi, se vogliamo restituire solo i valori degli elementi della mappa, possiamo semplicemente restituire kv.second:
[](auto &kv) { return kv.second; }
Penso che questo spieghi ogni dubbio.