从对象的容器传递到这些对象的属性的容器
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_;})
例如,给定下面的代码和单个驱动程序对象,我想获得 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_;})