Zacznijmy od tego, że oddzielasz argumenty wywołania funkcji srednikami a nie przecinkami:
auto it2 = find_if(wektor.begin(); wektor.end(); this->name == 555);
W przypadku find_if musisz podać predykat - coś co przy wywołaniu:
predykat(*element_wektora)
zwróci bool. Jest kilka opcji:
- lambda
- zwykła funkcja
- obiekt z przeciążonym operatorem wywołania
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
class Person
{
public:
string name;
int number;
public:
Person(string name, int number) : name(name), number(number) {}
~Person() {}
};
bool pred(const Person &p)
{
return p.number == 555;
}
struct pred_struct
{
bool operator()(const Person &p)
{
return p.number == 555;
}
};
int main()
{
vector<Person> wektor;
wektor.push_back(Person("Marek", 555));
wektor.push_back(Person("Robert", 123));
for (vector<Person>::iterator it = wektor.begin(); it != wektor.end(); it++)
cout << it->name << " " << it->number << endl;
auto lambda = find_if(wektor.begin(), wektor.end(),
[](const Person &p) { return p.number == 555; });
auto function = find_if(wektor.begin(), wektor.end(), pred);
auto object = find_if(wektor.begin(), wektor.end(), pred_struct{});
std::cout << lambda->name << std::endl;
std::cout << function->name << std::endl;
std::cout << object->name << std::endl;
}