c++ - 在 C++ 中对 vector 进行子集化

标签 c++ vector

在 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/

相关文章:

c++ - 如何从stringstream中跳过空格和换行符并将它们放入 vector 中?

c++ - 遍历 vector 并删除内容

c++11 - C++ 11 中的单例使用成员函数说明符

C++ vector 问题

c++ - 如何对 Singleton 类进行单元测试 - C++?

c++ - 指向指针赋值的指针

c++ - 如何让一个接口(interface)返回不同的数据类型?

c++ - 基本 OpenGL 程序崩溃,但适用于 gdb

vector - Julia .重新标记向量

c++ - 如何处理请求时可能不会终止的线程?