#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;}
);
Désolé de ne pas avoir ajouté d'explication - je pensais que le code est si simple qu'il ne nécessite aucune explication. Donc:
transform( beginInputRange, endInputRange, outputIterator, unaryOperation)
cette fonction appelle unaryOperation
chaque élément de la inputIterator
plage ( beginInputRange
- endInputRange
). La valeur de l'opération est stockée dansoutputIterator
.
Si nous voulons opérer sur toute la carte, nous utilisons map.begin () et map.end () comme plage d'entrée. Nous voulons conserver nos valeurs dans le vecteur carte - donc nous devons utiliser back_inserter sur notre vecteur: back_inserter(your_values_vector)
. Le back_inserter est un outputIterator spécial qui pousse de nouveaux éléments à la fin d'une collection donnée (en tant que paramètre). Le dernier paramètre est unaryOperation - il ne prend qu'un seul paramètre - la valeur de inputIterator. Nous pouvons donc utiliser lambda:,
[](auto &kv) { [...] }
où & kv est juste une référence à la paire d'éléments de la carte. Donc, si nous voulons renvoyer uniquement les valeurs des éléments de la carte, nous pouvons simplement renvoyer kv.second:
[](auto &kv) { return kv.second; }
Je pense que cela explique les doutes.