在 C++ 中是否有一种简单的方法可以从具有特定属性的 vector 中提取元素?该 vector 包含来 self 自己定义的名为“Individual”的类的对象。
我正在寻找类似于 SQL 中此命令的 C++ 等价物:
> NewVector = SELECT * FROM MyVector WHERE Age > 10
或者 R 中的这个:
> NewVector <- subset(MyVector, Age > 10)
基本上,我想扫描 MyVector
的所有元素,并在满足条件时将它们添加到 NewVector
MyVector[i].Age > 10
。
以下是这些 vector 的定义方式:
> vector<Individual> MyVector(20000); // this one later gets filled with stuff
> vector<Individual> NewVector(0); // i want this to be a subset of MyVector
最佳答案
我相信,惯用的方法是使用 std::copy_if
.您为它提供列表中的迭代器、新列表中的插入器以及谓词的函数对象。
有点像
std::copy_if(MyVector.begin(), MyVector.end(), std::back_inserter(NewVector), [] (Individual i) { return i.Age > 10; });
编辑:注意复制语义是你想要的。如果你有 Individual
s 在 vector 本身中,而不是指针中,那么这将导致 NewVector
没有与以前相同的对象,因为它们正在被复制。通常,C++ 没有(好的)方法可以用与另一个 vector 共享的对象填充一个 vector ;您可能希望考虑 vector<std::shared_ptr<Individual>>
相反。
关于c++ - 在 C++ 中对 vector 进行子集化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31235220/