#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;}
);
Lamento no haber agregado ninguna explicación; pensé que el código es tan simple que no requiere ninguna explicación. Entonces:
transform( beginInputRange, endInputRange, outputIterator, unaryOperation)
esta función llama unaryOperation
a todos los elementos del inputIterator
rango ( beginInputRange
- endInputRange
). El valor de la operación se almacena en outputIterator
.
Si queremos operar en todo el mapa, usamos map.begin () y map.end () como nuestro rango de entrada. Queremos almacenar nuestros valores de mapa en el vector - así que tenemos que utilizar back_inserter en nuestro vector: back_inserter(your_values_vector)
. El back_inserter es un outputIterator especial que inserta nuevos elementos al final de la colección dada (como parámetro). El último parámetro es unaryOperation: solo toma un parámetro: el valor de inputIterator. Entonces podemos usar lambda :
[](auto &kv) { [...] }
, donde & kv es solo una referencia al par de elementos del mapa. Entonces, si queremos devolver solo los valores de los elementos del mapa, simplemente podemos devolver kv.second:
[](auto &kv) { return kv.second; }
Creo que esto explica cualquier duda.