# less_equal Struct

**Visual Studio 2015**

The latest version of this topic can be found at less_equal Struct.

A binary predicate that performs the less-than-or-equal-to operation ( `operator<=`

) on its 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 T, class U> auto operator()(T&& Left, U&& Right) const -> decltype(std::forward<T>(Left) <= std::forward<U>(Right)); };

#### Parameters

`Type`

, `T`

, `U`

Any type that supports an `operator<=`

that takes operands of the specified or inferred types.

`Left`

The left operand of the less-than-or-equal-to operation. The unspecialized template takes an lvalue reference argument of type `Type`

. The specialized template does perfect forwarding of lvalue and rvalue reference arguments of inferred type `T`

.

`Right`

The right operand of the less-than-or-equal-to operation. The unspecialized template takes an lvalue reference argument of type `Type`

. The specialized template does perfect forwarding of lvalue and rvalue reference arguments of inferred type `U`

.

The result of `Left``<=``Right`

. The specialized template does perfect forwarding of the result, which has the type returned by `operator<=`

.

The binary predicate `less_equal`

< `Type`

> provides a strict weak ordering of a set of element values of type `Type`

into equivalence classes, if and only if this type satisfies the standard mathematical requirements for being so ordered. The specializations for any pointer type yield a total ordering of elements, in that all elements of distinct values are ordered with respect to each other.

// 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; }

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

**Header:** <functional>

**Namespace:** std