I'm having some issues with the lower_bound comparison function.
I have a set of pairs ordered by the second value of the pair and i'm tryin to get the lower_bound from this set by a value.
My current code is:
#include <iostream>
#include <algorithm>
#include <vector>
#include <set>
using namespace std;
struct setCompareFunctor
{
bool operator( )( const pair< int, int > &lhs, const pair< int, int > &rhs ) const
{
return( lhs.second <= rhs.second );
}
};
struct setCompareFunctorAux
{
bool operator( )( const pair< int, int > &lhs, const pair< int, int > &rhs ) const
{
return( lhs.second <= rhs.second );
}
bool operator( )( const pair< int, int > &lhs, int val ) const
{
return( lhs.second <= val );
}
bool operator( )( int val, const pair< int, int > &rhs ) const
{
return( val <= rhs.second );
}
};
int main( )
{
set< pair< int, int >, setCompareFunctor > submultimi;
submultimi.insert( make_pair( 1, 15 ) );
submultimi.insert( make_pair( 2, 9 ) );
submultimi.insert( make_pair( 3, 33 ) );
submultimi.insert( make_pair( 4, 44 ) );
submultimi.insert( make_pair( 5, 20 ) );
submultimi.insert( make_pair( 6, 15 ) );
set< pair< int, int >, setCompareFunctor >::iterator it = lower_bound( submultimi.begin( ), submultimi.end( ), 20, setCompareFunctorAux( ) );
cout << ( *it ).second << endl;
return 0;
}
The expected result is 15, but the real result is 33.
What is wrong ?