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