#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;}
);
Üzgünüm herhangi bir açıklama eklemedim - kodun o kadar basit olduğunu ve herhangi bir açıklama gerektirmediğini düşündüm. Yani:
transform( beginInputRange, endInputRange, outputIterator, unaryOperation)
bu işlev aralıktaki ( - ) unaryOperation
her öğeyi çağırır . İşlemin değeri şurada saklanır:inputIterator
beginInputRange
endInputRange
outputIterator
.
Tüm harita üzerinde çalışmak istiyorsak - girdi aralığımız olarak map.begin () ve map.end () kullanırız. Biz vektör içine Haritamız değerlerini saklamak istediğiniz - bizim vektör üzerinde back_inserter kullanmak zorunda: back_inserter(your_values_vector)
. Back_inserter, verilen (paremeter olarak) koleksiyonun sonunda yeni öğeleri iten özel outputIterator'dır. Son parametre unaryOperation'dır - yalnızca bir parametre alır - inputIterator değeri. Böylece lambda: kullanabiliriz
[](auto &kv) { [...] }
, burada & kv yalnızca eşleme öğesinin çiftine bir referanstır. Dolayısıyla, haritanın öğelerinin yalnızca değerlerini döndürmek istiyorsak, basitçe kv.second döndürebiliriz:
[](auto &kv) { return kv.second; }
Sanırım bu herhangi bir şüpheyi açıklıyor.