从对象的容器传递到这些对象的属性的容器

Passing from container of objects to container of an attribute of these objects

例如,给定下面的代码和单个驱动程序对象,我想获得 skills_ids 的 std::set,其中包含驱动程序具有的技能 ID(或向量,如果 skills_是一个 std::vector).

是否有 elegant/efficient 方法来做到这一点(而不是简单地迭代技能容器)?

class skill {
public:
    unsigned long id_;
    std::string name_;
};

class driver {
public:
    std::set<shared_ptr<skill> > skills_;
    // ---> how to elegantly get an std::set< unsigned int > skills_ids; 
};

使用 std::transform, std::inserter 和 lambda。

std::set<unsigned int> skill_ids;

std::transform(skills_.begin(), skills_.end(), std::inserter(skill_ids, skill_ids.begin()), [](skill& s){return s.id_;})