Struct less

Um predicado binário que executa a operação menor que ( operator<) em seus argumentos.

Sintaxe

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

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

Parâmetros

Tipo, T, U
Qualquer tipo que dê suporte a um operator< que usa operandos dos tipos especificados ou inferidos.

Left
O operando esquerdo da operação "menor que". O modelo não especializado usa um argumento de referência lvalue do tipo Type. O modelo especializado realiza o encaminhamento perfeito dos argumentos de referência lvalue e rvalue do tipo inferido T.

Right
O operando direito da operação "menor que". O modelo não especializado usa um argumento de referência lvalue do tipo Type. O modelo especializado realiza o encaminhamento perfeito dos argumentos de referência lvalue e rvalue do tipo U inferido.

Valor de Devolução

O resultado de Left < Right. O modelo especializado realiza o encaminhamento perfeito do resultado, que tem o tipo retornado por operator<.

Comentários

O predicado binário less<Type> fornece uma ordenação fraca estrita de um conjunto de valores de elemento do tipo Type em classes de equivalência, se e somente se esse tipo atender aos requisitos matemáticos padrão para ser ordenado dessa forma. As especializações de qualquer tipo de ponteiro produzem uma ordenação total dos elementos, pois todos os elementos de valores distintos são ordenados em relação uns aos outros.

Exemplo

// functional_less.cpp
// compile with: /EHsc
#include <vector>
#include <algorithm>
#include <functional>
#include <iostream>

struct MyStruct {
   MyStruct(int i) : m_i(i){}

   bool operator < (const MyStruct & rhs) const {
      return m_i < rhs.m_i;
   }

   int m_i;
};

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

   int i;
   for ( i = 0 ; i < 7 ; i++ )
       v1.push_back( MyStruct(rand()));

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

   // To sort in ascending order,
   sort( v1.begin( ), v1.end( ), less<MyStruct>());

   cout << "Sorted vector v1 = ( " ;
   for ( Iter1 = v1.begin() ; Iter1 != v1.end() ; Iter1++ )
cout << Iter1->m_i << " ";
   cout << ")" << endl;
}
Original vector v1 = (41 18467 6334 26500 19169 15724 11478)
Sorted vector v1 = (41 6334 11478 15724 18467 19169 26500)