#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;}
);
Xin lỗi vì tôi đã không thêm bất kỳ lời giải thích nào - tôi nghĩ rằng mã đó quá đơn giản nên không cần bất kỳ lời giải thích nào. Vì thế:
transform( beginInputRange, endInputRange, outputIterator, unaryOperation)
hàm này gọi unaryOperation
mọi mục từ inputIterator
phạm vi ( beginInputRange
- endInputRange
). Giá trị của hoạt động được lưu trữ vào outputIterator
.
Nếu chúng tôi muốn vận hành toàn bộ bản đồ - chúng tôi sử dụng map.begin () và map.end () làm phạm vi đầu vào của chúng tôi. Chúng tôi muốn để lưu trữ các giá trị bản đồ của chúng tôi vào vector - vì vậy chúng ta phải sử dụng back_inserter trên vector của chúng tôi: back_inserter(your_values_vector)
. Back_inserter là outputIterator đặc biệt đẩy các phần tử mới vào cuối tập hợp (dưới dạng paremeter) đã cho. Tham số cuối cùng là unaryOperation - nó chỉ nhận một tham số - giá trị của inputIterator. Vì vậy, chúng ta có thể sử dụng lambda :
[](auto &kv) { [...] }
, where & kv chỉ là một tham chiếu đến cặp của mục bản đồ. Vì vậy, nếu chúng ta chỉ muốn trả về các giá trị của các mục của bản đồ, chúng ta có thể chỉ cần trả về kv.second:
[](auto &kv) { return kv.second; }
Tôi nghĩ rằng điều này giải thích bất kỳ nghi ngờ nào.