#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; }
Думаю, це пояснює будь-які сумніви.