根据结构成员数据从向量返回结构项的函数

时间:2019-03-23 03:36:27

标签: c++ vector struct

我对C ++还是很陌生,所以我对lambda函数的工作方式不太熟悉。我想查看向量“问题”是否包含结构项,其特定成员值等于“ animalProblemNumber”。然后,我想返回整个struct项目。以下是我要实现的“ for循环版本”。

我还有一个名为“ checkProblem”的函数,以查看“问题项”是否首先存在。我可以在一个功能中同时实现这两个功能吗?

谢谢能帮助我的人。

Problem getProblem(int animalProblemNumber, std::vector<Problem>      problems){
for(Problem p: problems){
    if(p.treatment == animalProblemNumber){
        return p;
    }
}

}

bool checkProblem(int animalProblemNumber, std::vector<Problem> problems){    //change this to lambda 
for(Problem p: problems){
    if(p.treatment == animalProblemNumber){
        return true;
    }
}
return false;
}

1 个答案:

答案 0 :(得分:2)

  1. 如果getProblem()不包含至少一个匹配项,则返回类型vector将是一个问题,不是双关语。最好返回一个迭代器。

  2. 将输入更改为getProblem()const&,以使返回的迭代器在函数返回时有效。

  3. 之后,您可以使用getProblem()来实现checkProblem()。j

  4. 也可以将
  5. checkProblem()更改为接受const&,尽管严格没有必要。

std::vector<Problem>::const_iterator getProblem(int animalProblemNumber,
                                                std::vector<Problem> const& problems)
{
    return std::find_if(problems.begin(), problems.end(),
                        [animalProblemNumber](Problem const& item)
                        { return item.treatment == animalProblemNumber; });
}

bool checkProblem(int animalProblemNumber, std::vector<Problem> const& problems)
{
   return (getProblem(animalProblemNumber, problems) != problems.end());
}