Шаблонний клас std::greater призначений для порівняння двох об’єктів. Клас призначений для створення примірників функціональних об’єктів, тобто таких, які мають перевантажений оператор дужок (виклик функції). Оголошення класу виглядає приблизно наступним чином:
template <class T> struct greater:
  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::greater */

Приклади

Приклад #1

Розглянемо приклад найпростішого використання класу greater - пряме порівняння значень змінних і виведення повідомлення у термінал.
#include <functional> /* greater */
#include <iostream> /* об'єкт cout */
using namespace std ; /* пишемо усе без std */

/* головна функція програми*/
int main (int argc, char** argv) 
{
  /* створюємо піддослідний примірник класу */
  greater <int> dpred ;
  
  /* створюємо змінні для збереження значень */
  int a = 10 ,
      b = a ;
  
  /* тестуємо їхнє відношення
  ** за допомогою примірника greater */
  cout << a << " > " << b << " : " << dpred (a, b) << endl ;
  
  /* змінюємо значення змінних */
  a ++ ;
  b -- ;
  
  /* повторно тестуємо відношення змінних */
  cout << a << " > " << b << " : " << dpred (a, b) << endl ;
  
  return 0 ;
}
Вивід програми: cpp_std_greater_sample1-cxx

Приклад #2

Розглянемо приклад використання класу greater, щоб інвертувати результат виконання роботи функції max_element, в результаті чого вона буде видавати не найбільший елемент, а найменший. Пошук буде виконуватися у контейнері vector.
#include <functional> /* greater */
#include <iostream> /* об'єкт cout */
#include <vector> /* контейнер вектор */
#include <algorithm> /* алгоритм search */
using namespace std ; /* друкуємо усе без std */

/* головна функція програми*/
int main (int argc, char** argv) 
{
  /* створюємо піддослідний примірник класу */
  greater <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 ;
}
Вивід програми: cpp_std_greater_sample2-cxx_max_element_is_less
Категорії: