Witam, mam problem, ponieważ nie mogę nigdzie znaleźć dobrego przykładu, jak używać funkcji find_if w c++. Za pomocą tej funkcji mam znaleźć osobe/osoby oddalone od pkt. o maksymalnie 10 jednostek... Problem leży tylko w umiejętności korzystania z tej funkcji, której niestety nie posiadam. Mógłby ktoś pomóc?
#include<iostream>
#include<cstdlib>
#include<ctime>
#include<string>
#include<vector>
#include<cmath>
#include<algorithm>
using namespace std;
struct Dziecko
{
string nazwisko;
string imie;
int x;
int y;
};
string losuj_imie(string losowe_imie)
{
for (int i = 0; i < 6; ++i)
{
losowe_imie[i] = rand() % ('Z' - 'A') + 'A';
}
return losowe_imie;
}
void wyswietl_liste(vector<Dziecko> Lista)
{
for (int i = 0; i < 5; ++i)
{
cout << Lista[i].nazwisko << " - ";
cout << Lista[i].imie << " - ";
cout << Lista[i].x << " - ";
cout << Lista[i].y << endl;
}
}
float odleglosc(int x, int y)
{
return sqrt(x*x + y*y);
}
bool czy_dalej(Dziecko &a, Dziecko &b)
{
float odl1, odl2;
odl1=odleglosc(a.x, a.y);
odl2 = odleglosc(b.x, b.y);
if (odl1 < odl2)
return true;
else
return false;
}
bool ktore_nazwisko_pierwsze_wg_alfabetu(Dziecko &a, Dziecko &b)
{
if (a.nazwisko<b.nazwisko)
{
return true;
}
else
{
if (a.nazwisko == b.nazwisko)
{
if (a.imie < b.imie)
{
return true;
}
else return false;
}
else return false;
}
//return false;
}
void sortuj_wg_alfabetu(vector<Dziecko> &lista)
{
sort(lista.begin(), lista.end(), ktore_nazwisko_pierwsze_wg_alfabetu);
}
bool predykat_do_find_if(Dziecko a)
{
if (sqrt((a.x)*(a.x) + (a.y)*(a.y)) < 10)
{
return true;
}
else return false;
}
void dzieci_ktore_sa_blizej_niz_10(vector<Dziecko>&ListaDzieci)
{
vector<Dziecko>::iterator ThisIt = {};
ThisIt=find_if(ListaDzieci.begin(), ListaDzieci.end(), predykat_do_find_if);
cout<< *ThisIt;
}
int main()
{
srand(time(NULL));
string imieD=" ";
vector<Dziecko> Lista_dzieci;
Dziecko testowa_zmienna;
for (int i = 0; i < 5; ++i)
{
testowa_zmienna.imie = losuj_imie(imieD);
testowa_zmienna.nazwisko = losuj_imie(imieD);
testowa_zmienna.x = rand() % 20;
testowa_zmienna.y = rand() % 20;
Lista_dzieci.push_back(testowa_zmienna);
}
wyswietl_liste(Lista_dzieci);
sort(Lista_dzieci.begin(), Lista_dzieci.end(), czy_dalej);
cout << endl << "Po Posortowaniu wzgledem odleglosci: " << endl;
wyswietl_liste(Lista_dzieci);
//zadanie a
sortuj_wg_alfabetu(Lista_dzieci);
cout << endl << "Po Posortowaniu wzgledem nazwiska i imienia: " << endl;
wyswietl_liste(Lista_dzieci);
//zadanie b
vector<Dziecko> dziecko{};
dziecko.push_back(dzieci_ktore_sa_blizej_niz_10(Lista_dzieci));
system("pause");
}
W funkcji main chodzi o moment gdzie zakomentowałem //zadanie b
Próbowałem na różne sposoby, ale niestety...