Я кодирую в C++. У меня есть проект с таким количеством файлов. У меня есть вектор пара именованного список выглядит следующим образом:найти внутри класса, если элемент существует внутри вектора пар
std::vector< std::pair< structure1, double> > list;
, и я хочу, чтобы проверить, если для конкретного двойного значения z
, существует элемент: el
в списке, что: el.second == z
Я хочу использовать find_if
Для этого я внедрил метод: Scheduled
, который принимает два аргумента: первый - это элемент, подобный тем, который хранится в списке, второй - конкретное значение для поиска. Я попробовал несколько способов, но я в конечном итоге получаю ошибку всегда первый путь:
bool classA::Scheduled(std::pair< structure1,double > const el, double const t)
{
return el.second==t;
}
внутри другого метода, но до сих пор в том же классе: CLASSA
auto Scheduled1 = std::bind(&classA::Scheduled,this,_1,z);
bool call=std::find_if(list.begin(),list.end(),Scheduled1)=!list.end();
Это решение дает следующее сообщение об ошибке:
error: ‘Scheduled1’ does not name a type
второй путь: непосредственно с помощью лямбда
bool call = std::find_if(list.begin(),list.end(),[this](std::pair<struct1,double> const& el){return el.second==z;})!=list.end();
г является переменной членом CLASSA Это второй способ кодирования приводит к этой ошибке:
error: no matching function for call to
«find_if (станд :: вектор> :: итератор, станд :: вектор> :: итератор, CLASSA :: method1 (интермедиат) :: __ lambda0)»
Типа вернулся из станд :: привязывать не функция-член, а Scheduled1 - значение, а не тип. –
Для записи то, что вы делаете, является формой [currying] (http://en.wikipedia.org/wiki/Currying) (в некоторых случаях это может упростить поиск с использованием этого имени). –
Извините, но вам нужно будет сделать лучше, если вам нужна дополнительная помощь. В добавленном вами коде есть несколько ошибок, и если вы не можете опубликовать действительный код, я больше не пытаюсь. '& ClassA :: IsItScheduled' -' c' в 'classA' теперь занимает верхний регистр? А что такое 'IsItScheduled'? '... Scheduled1) =! List.end();' - '=!' Явно неверно. И в примере лямбда результат 'find_if' не конвертируется в' bool', вам нужно сравнить это с конечным итератором, как и в другом примере. Создайте тестовый файл, который я могу скопировать-вставить как есть, и воспроизвести ошибку. См. [SSCCE] (http://sscce.org) – Praetorian