Export (0) Print
Expand All
This topic has not yet been rated - Rate this topic

binder2nd Class

A template class providing a constructor that converts a binary function object into a unary function object by binding the second argument of the binary function to a specified value.

template<class Operation>
   class binder2nd
      : public unary_function <
         typename Operation::first_argument_type,
         typename Operation::result_type> 
   {
   public:
   typedef typename Operation::first_argument_type argument_type;
   typedef typename Operation::result_type result_type;
   binder2nd(
      const Operation& _Func,
      const typename Operation::second_argument_type& _Right
   );
   result_type operator()(
      const argument_type& _Left
   ) const;
   result_type operator()(
   argument_type& _Left
   ) const;
   protected:
   Operation op;
   typename Operation::second_argument_type value;
   };

Parameters

_Func
The binary function object to be converted to a unary function object.
_Right
The value to which the second argument of the binary function object is to be bound.
_Left
The value of the argument that the adapted binary object compares to the fixed value of the second argument.

Return Value

The unary function object that results from binding the second argument of the binary function object to the value _Right.

Remarks

The template class stores a copy of a binary function object _Func in op, and a copy of _Right in value. It defines its member function operator() as returning op(_Left, value).

If _Func is an object of type Operation and c is a constant, then bind2nd ( _Func, c ) is equivalent to the binder2nd class constructor binder2nd<Operation> ( _Func, c ) and more convenient.

Example

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

using namespace std;

int main( )
{
   vector <int> v1;
   vector <int>::iterator Iter;
   
   int i;
   for ( i = 0 ; i <= 5 ; i++ )
   {
      v1.push_back( 5 * i );
   }

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

   // Count the number of integers > 10 in the vector
   int result1;
   result1 = count_if( v1.begin( ), v1.end( ), 
      binder2nd<greater<int> >( greater<int>( ), 10 ) );
   cout << "The number of elements in v1 greater than 10 is: "
        << result1 << "." << endl;

   // Compare using binder1st fixing 1st argument:
   // count the number of integers < 10 in the vector
   int result2;
   result2 = count_if( v1.begin( ), v1.end( ), 
      binder1st<greater<int> >( greater<int>(), 10 ) );
   cout << "The number of elements in v1 less than 10 is: "
        << result2 << "." << endl;
}

Output

The vector v1 = ( 0 5 10 15 20 25 )
The number of elements in v1 greater than 10 is: 3.
The number of elements in v1 less than 10 is: 2.

See Also

<functional> Members | Thread Safety in the Standard C++ Library

Did you find this helpful?
(1500 characters remaining)
Thank you for your feedback
Show:
© 2014 Microsoft. All rights reserved.