#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;}
);
Przepraszam, że nie dodałem żadnego wyjaśnienia - pomyślałem, że kod jest tak prosty, że nie wymaga żadnego wyjaśnienia. Więc:
transform( beginInputRange, endInputRange, outputIterator, unaryOperation)
ta funkcja wywołuje unaryOperation
każdy element z inputIterator
zakresu ( beginInputRange
- endInputRange
). Wartość operacji jest przechowywana w outputIterator
.
Jeśli chcemy operować całą mapą - używamy map.begin () i map.end () jako zakresu wejściowego. Chcemy, aby przechowywać nasze wartości mapę do wektora - więc musimy użyć back_inserter na naszym wektorem: back_inserter(your_values_vector)
. Back_inserter to specjalny outputIterator, który umieszcza nowe elementy na końcu podanej (jako paremeter) kolekcji. Ostatni parametr to unaryOperation - przyjmuje tylko jeden parametr - wartość inputIterator. Możemy więc użyć lambda:,
[](auto &kv) { [...] }
gdzie & kv jest po prostu odniesieniem do pary elementu mapy. Więc jeśli chcemy zwrócić tylko wartości elementów mapy, możemy po prostu zwrócić kv.second:
[](auto &kv) { return kv.second; }
Myślę, że to wyjaśnia wszelkie wątpliwości.