@Loligan

Для чего нужен данные предикаты?

Сам класс:

class Sobaka
{
private:
string klichka;
string poroda;
float vozrast;
public:
Sobaka()
{
klichka = "";
poroda = "";
vozrast = 0.0;
}
...


Предикаты:
class Pred_klichka
{
private:
string klichka;
public:
Pred_klichka(string _klichka)
{
klichka = _klichka;
}
bool operator ()(Sobaka &item)
{
return item.getklichka()== klichka;
}
};

class Pred_Year
{
private:
string poroda;
public:
Pred_Year(string _poroda)
{
poroda = _poroda;
}
bool operator ()(Sobaka &item)
{
return item.getPoroda()== poroda;
}
};
  • Вопрос задан
  • 224 просмотра
Пригласить эксперта
Ответы на вопрос 2
zenden2k
@zenden2k
PHP & C++ programmer
Для поиска собак по кличке или породе?

Предикаты- подмножество функторов, в которых тип возвращаемого значения operator() bool. Предикаты используются в алгоритмах сортировок, поиска, а также во всех остальных, имеющих на конце _if. Смысл в том, что объект-функция в случае использования предиката возвращает истину или ложь в зависимости от выполнения необходимого условия. Это либо удовлетворение объектом неких свойств, либо результат сравнения двух объектов по определенному признаку.
Ответ написан
Комментировать
@Mercury13
Программист на «си с крестами» и не только
Попробую рассказать.

Некоторые поисковые функции STL требуют для работы функцию. Например, www.cplusplus.com/reference/algorithm/find_if или www.cplusplus.com/reference/algorithm/sort (второй вариант).

А что делать, если какие-то параметры поиска или сортировки задаются программно? Можно, конечно, эти параметры сделать глобальными переменными — но, как известно, «избегайте незнакомых женщин и глобальных переменных». В таком случае используют т.н. функтор — некий объект с операцией (). Другими словами, его «вызывают», как функцию. Все изменяемые параметры будут храниться в полях этого объекта.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы