less_equal, struct

Un prédicat binaire qui effectue l'opération inféireure-ou-égale (operator<=) à ses arguments.

template<class Type = void>
   struct less_equal : public binary_function <Type, Type, bool> 
   {
      bool operator()(
         const Type& Left, 
         const Type& Right
      ) const;
   };

// specialized transparent functor for operator<=
template<>
   struct less_equal<void>
   {
      template<class Type1, class Type2>
      auto operator()(Type1&& Left, Type2&& Right) const
         -> decltype(std::forward<Type1>(Left)
            <= std::forward<Type2>(Right));
   };

Paramètres

  • Type, Type1, Type2
    Tout type qui prend en charge operator<= qui prend des opérandes des types spécifiés ou déduits.

  • Left
    L'opérande de gauche de l'opération inférieure-ou-égale. Le modèle non spécialisé prend un argument de référence lvalue de type Type. Le modèle spécialisé perfectionne le transfert des arguments de référence lvalue et rvalue de type déduit Type1.

  • Right
    L'opérande de droite de l'opération inférieure-ou-égale. Le modèle non spécialisé prend un argument de référence lvalue de type Type. Le modèle spécialisé perfectionne le transfert des arguments de référence lvalue et rvalue de type déduit Type2.

Valeur de retour

Le résultat de Left * <= + Right. Le modèle spécialisé effectue de façon parfaite le transfert du résultat, qui a le type retourné par operator<=.

Notes

Le prédicat binaire less_equal<Type> fournit une commande faible stricte d'un ensemble de valeurs d'éléments de type Type dans les classes d'équivalence, si et seulement si ce type satisfait aux exigences mathématiques standard pour être classée. Les spécialisations pour tout type de pointeur produisent une commande globale d'éléments, car tous les éléments des valeurs distinctes sont classés par rapport à l'autre.

Exemple

// functional_less_equal.cpp
// compile with: /EHsc
#define _CRT_RAND_S
#include <stdlib.h>
#include <vector>
#include <algorithm>
#include <functional>
#include <cstdlib>
#include <iostream>

int main( )
{
   using namespace std;
   vector <int> v1;
   vector <int>::iterator Iter1;
   vector <int>::reverse_iterator rIter1;
   unsigned int randomNumber;

   int i;
   for ( i = 0 ; i < 5 ; i++ )
   {
      if ( rand_s( &randomNumber ) == 0 )
      {
         // Convert the random number to be between 1 - 50000
         // This is done for readability purposes
         randomNumber = ( unsigned int) ((double)randomNumber / 
            (double) UINT_MAX * 50000) + 1;

         v1.push_back( randomNumber );
      }
   }
   for ( i = 0 ; i < 3 ; i++ )
   {
      v1.push_back( 2836 );
   }

   cout << "Original vector v1 = ( " ;
   for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
      cout << *Iter1 << " ";
   cout << ")" << endl;

   // To sort in ascending order,
   // use the binary predicate less_equal<int>( )
   sort( v1.begin( ), v1.end( ), less_equal<int>( ) );
   cout << "Sorted vector v1 = ( " ;
   for ( Iter1 = v1.begin( ) ; Iter1 != v1.end( ) ; Iter1++ )
      cout << *Iter1 << " ";
   cout << ")" << endl;
}

Résultat de l'exemple

Original vector v1 = ( 31247 37154 48755 15251 6205 2836 2836 2836 )
Sorted vector v1 = ( 2836 2836 2836 6205 15251 31247 37154 48755 )

Configuration requise

En-tête : <functional>

Espace de noms : std

Voir aussi

Référence

Bibliothèque STL (Standard Template Library)