Adi*_*aru 2 c++ algorithm stl function lower-bound
我对lower_bound比较函数有一些问题.
我有一对由该对的第二个值排序的对,我试着通过一个值从这个集合中获取lower_bound.
我目前的代码是:
#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;
}
Run Code Online (Sandbox Code Playgroud)
预期结果是15,但实际结果是33.
怎么了 ?
预期结果是15,但实际结果是33.
不,预期的结果是20,因为函数"返回指向范围[first,last]中的第一个元素的迭代器,它不会比val小.",正如您可以在std::lower_bound
参考中读到的那样.
你不会得到这个结果,因为你使用<=
而不是<
在你的setCompareFunctorAux
结构中.
结果,当你搜索20时,它会从平等中感到困惑,并在搜索时走向错误的方向.
PS:与您的问题无关,但setCompareFunctor
不是有效的比较器,因为它不满足严格的弱排序.为了做到这一点,只需<=
改为<
.阅读更多运算符<和严格的弱排序.