Страницы

Поиск по вопросам

суббота, 30 марта 2019 г.

третий параметр алгоритма find

Используя метод find, легко найти есть ли заданное значение в контейнере, или нет:
std::vector vec; std::vector::iterator itr = find(vec.begin() ,vec.end(), int val); if(...)
и так далее;
Но что, если вектор содержит какие-либо структуры, объекты, или даже указатели на них? Возможно ли использовать эту функцию для нахождения необходимого значения, если оно является полем класса, а вектор состоит из указателей на объект этого класса? Что-то вроде:
class ClassName { public: int x; std::string y; };
std::string foo = "bar"; std::vector vec1; std::vector::iterator itr = find( vec1.begin(), vec1.end(), ??? )
Что нужно написать вместо знаков вопроса, чтобы найти такой указатель, который указывает на объект, поле std::string y которого равно строке foo ? Если это невозможно с алгоритмом find, то какие альтернативы?


Ответ

Используйте find_if, она принимает предикат.
std::string foo = "bar"; std::vector vec1; auto itr = std::find_if(begin(vec1), end(vec1), [&](ClassName* el){ return el->y == foo; });

Комментариев нет:

Отправить комментарий