#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;}
);
Извините, что я не добавил никаких объяснений - я думал, что код настолько прост, что не требует никаких объяснений. Так:
transform( beginInputRange, endInputRange, outputIterator, unaryOperation)
эта функция вызывает unaryOperationкаждый элемент из inputIteratorдиапазона ( beginInputRange- endInputRange). Значение операции сохраняется в outputIterator.
Если мы хотим работать со всей картой - мы используем map.begin () и map.end () в качестве диапазона ввода. Мы хотим сохранить наши ценности карты в векторе - поэтому мы должны использовать back_inserter на нашем векторе: back_inserter(your_values_vector). Back_inserter - это специальный outputIterator, который подталкивает новые элементы в конец данной (как параметр) коллекции. Последний параметр - unaryOperation - принимает только один параметр - значение inputIterator. Таким образом, мы можем использовать лямбда :
[](auto &kv) { [...] }, где & kv - это просто ссылка на пару элементов карты. Поэтому, если мы хотим вернуть только значения элементов карты, мы можем просто вернуть kv.second:
[](auto &kv) { return kv.second; }
Думаю, это объясняет любые сомнения.