Шаблонний клас std::equal_to призначений для порівняння двох параметрів. Виступає функціональним об'єктом - тобто має перевантажений оператор дужок (виклику функції). Оголошення виглядає приблизно наступним чином:
template <class T>
struct equal_to:
binary_function <T,T,bool>
{
bool operator() (const T& x, const T& y) const
{ return x==y ; }
} ;
Перевантажений оператор дужок повертає true, якщо передані два параметри x i y еквівалентні. Використовується, наприклад, разом з алгоритмами файлу algorithm.
Щоб використовувати даний клас функціональних об’єктів, слід у код підключити файл functional:
#include <functional> /* усе корисне разом з std::equal_to */
Приклади
Приклад #1
Розлянемо простий приклад використання класу.
#include <functional> /* equal_to */
#include <iostream> /* об'єкт cout */
using namespace std ; /* пишемо усе без std */
/* головна функція програми*/
int main (int argc, char** argv)
{
/* створюємо піддослідний примірник класу */
equal_to <int> dpred ;
/* створюємо змінні для збереження значень */
int a = 10 ,
b = a ;
/* тестуємо їхню еквівалентність
** за допомогою примірника equal_to */
cout << a << " ?= " << b << " : " << dpred (a, b) << endl ;
/* змінюємо значення змінних */
a ++ ;
b -- ;
/* повторно тестуємо еквівалентність змінних */
cout << a << " ?= " << b << " : " << dpred (a, b) << endl ;
return 0 ;
}
Вивід програми наступний:
Приклад #2
Рогзлянемо приклад використання даного класу разом з алгоритмом search.
#include <iostream> /* об'єкт cout */
#include <functional> /* equal_to */
#include <algorithm> /* алгоритм search */
#include <string> /* рядковий клас */
using namespace std ; /* пишемо усе без std */
/* головна функція програми*/
int main (int argc, char** argv)
{
/* створюємо піддослідний примірник класу */
equal_to <wchar_t> dpred ;
/* створюємо піддослідні рядки */
wstring str = L"Козача потилиця панам ляхам не хилиться." ;
wstring srch = L"не" ;
/* виконуємо пошук підрядка в рядку
** з використанням придекату */
wstring::iterator iter = search (str.begin(), str.end(), /* межі рядка */
srch.begin(), srch.end(), /* межі шуканого */
dpred) ; /* передаємо бінарний придекат */
/* перевіряємо результат і виводимо відповідне повідомлення */
if (iter!=str.end())
{ cout << "Рядок знайдено." << endl ; }
else
{ cout << "Рядок не знайдено." << endl ; }
return 0 ;
}
Вивід програми наступний: