如何在c ++中过滤对象

use*_*378 4 c++ lambda vector c++11

假设我有一节课:

class Cell {
  int ID;
  int valueX;
  int valueY;
};
Run Code Online (Sandbox Code Playgroud)

在main()中我声明了Cells的向量:

vector<Cell> myCells;
Run Code Online (Sandbox Code Playgroud)

我的问题是编写一个函数,它获取单元格的向量,运算符(gt - 大于,等于或等于等等),变量名称和整数,并返回满足要求的单元格向量?例如:

vector<Cells> resultCells = filter(myCells, gt, valueX, 5)
Run Code Online (Sandbox Code Playgroud)

是Cell的向量,其中每个单元格的valueX大于5.

我的第一次尝试需要大量的ifs和开关,我确信这不是正确的解决方案.然后我问朋友一个提示,他告诉我有关像functor,lambdas,std :: function,std :: map,std :: bind之类的东西,这可以帮助我做到这一点,我已经读过它,但我我无法在实践中使用.

我在互联网上看到的一个例子是这个,但它不那么复杂,难以重用(对我来说).

San*_*ker 10

尝试使用以下内容std::copy_if:

std::vector<Cell> resultCells;
std::copy_if(myCells.begin(), myCells.end(), std::back_inserter(resultCells), [](const Cell& c) { return c.valueX > 5; });
Run Code Online (Sandbox Code Playgroud)