#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 ดังนั้นเราจึงสามารถใช้ lambda:
[](auto &kv) { [...] }
โดยที่ & kv เป็นเพียงการอ้างอิงคู่ของรายการแผนที่ ดังนั้นหากเราต้องการส่งคืนเฉพาะค่าของรายการในแผนที่เราสามารถคืนค่า kv วินาที:
[](auto &kv) { return kv.second; }
ฉันคิดว่านี่เป็นการอธิบายข้อสงสัยใด ๆ