#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 não ter acrescentado nenhuma explicação - pensei que o código é tão simples que não requer nenhuma explicação. Então:
transform( beginInputRange, endInputRange, outputIterator, unaryOperation)
esta função chama unaryOperation
todos os itens do inputIterator
intervalo ( beginInputRange
- endInputRange
). O valor da operação é armazenado em outputIterator
.
Se quisermos operar através do mapa inteiro - usamos map.begin () e map.end () como nosso intervalo de entrada. Queremos guardar os nossos valores do mapa para vetor - por isso temos de usar back_inserter em nosso vetor: back_inserter(your_values_vector)
. O back_inserter é um outputIterator especial que empurra novos elementos no final de determinada coleção (como parâmetro). O último parâmetro é unaryOperation - leva apenas um parâmetro - o valor de inputIterator. Portanto, podemos usar lambda
[](auto &kv) { [...] }
:, onde & kv é apenas uma referência para o par do item do mapa. Portanto, se quisermos retornar apenas os valores dos itens do mapa, podemos simplesmente retornar kv.segundo:
[](auto &kv) { return kv.second; }
Acho que isso explica todas as dúvidas.