Шаблонний клас 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 ;
}
Вивід програми наступний: cpp_std_equal_to_sample1-cxx

Приклад #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 ;
}
Вивід програми наступний: cpp_std_equal_to_sample2-cxx
Категорії: