C++如何使用 lambda find_if选择多个对象

C++ how to select multiple objects using lambda find_if

本文关键字:选择 对象 if 何使用 lambda find C++      更新时间:2023-10-16

我正在尝试浏览对象向量,然后选择一个匹配的特定 ID。下面的示例将打印与 ID 匹配的第一个对象,但如何打印或选择几个与相同 ID 匹配的对象?我尝试使用 while 循环,它可以工作,但是因为我每次都必须增加迭代器,我总是会遇到"分段错误"。

it = find_if(database.begin(), database.end(), [&id](cd &c) {
    return c.getId() == id;
});
int index = std::distance(database.begin(), it); //finding index of the object
database[index].print(); //prints everything from the object

有几种选择,包括:

for (auto& c: database) {
    if (c.getId() == id) {
        c.print();
    }
}

  auto next_it = [&](auto beg) {
      return std::find_if(beg, database.end(),
          [&id](cd &c) {
              return c.getId() == id;
          });
  };
  for (auto it = next_it(database.begin()); it != database.end(); it = next_it(it + 1)) {
      it->print();
  }

或(范围 v3)

for (auto& c: database | ranges::filter([&](const auto& c){ return c.getId() == id; })) {
    c.print();
}

按原样需要某种循环。你想做什么没有一行。我认为您想改用 std::copy_if 函数。