我想从 set
的每个条目的成员变量的内容中创建和填充 vector
。这就是我正在做的:
struct S { int i; };
int main()
{
std::vector<S*> structPtrs;
// code to fill the above vector
// create set from the above vector
std::set<int> setInts;
for (auto it = structPtrs.begin(); it != structPtrs.end(); ++it)
{
setInts.insert((*it)->i);
}
}
有没有 STL 方法来做到这一点?或者通过
<algorithm>
中的任何可用方法?
最佳答案
您始终可以将 vector 定义的范围中的 std::transform
应用到 std::inserter
定义的“范围”上:
transform(begin(structPtrs), end(structPtrs),
inserter(setInts, end(setInts)), [] (S* s) {
return s->i;
});
这应该足以使用标准库。
如果您愿意超越标准库,还可以选择使用类似
boost::transform_iterator
的东西,这将允许您将范围转换移动到集合的初始化中:auto transfomer = [](S* s) { return s->i; };
std::set<int> setInts(
boost::make_transform_iterator(begin(structPtrs), transfomer),
boost::make_transform_iterator(end(structPtrs), transfomer)
);
关于c++ - 从 std::vector 创建/填充 std::set 的 STL 方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49166733/