Функция, которая возвращает элемент структуры из вектора на основе данных члена структуры - PullRequest
0 голосов
/ 23 марта 2019

Я очень новичок в c ++, поэтому я не очень знаком с тем, как здесь работают лямбда-функции.Я хочу видеть, содержит ли вектор 'problem' элемент структуры с определенным значением члена, равным 'animalProblemNumber'.Затем я хочу вернуть весь элемент структуры.Ниже приведена «версия для цикла» того, чего я пытаюсь достичь.

У меня также есть функция с именем '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 Ответ

2 голосов
/ 23 марта 2019
  1. Тип возврата getProblem() будет проблемой, без каламбура, если vector не содержит хотя бы один соответствующий элемент.Будет лучше вернуть итератор.

  2. Измените ввод на getProblem() a const&, чтобы восстановленный итератор был действительным, когда функция вернется.

  3. После этого вы можете использовать getProblem() для реализации checkProblem() .j

  4. 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());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...