我已经有几年没有接触过 C++ 了,所以请多多包涵。 我需要在其他容器的排序 vector 中进行二进制搜索,比方说成对,但无论出于何种原因,我都无法编译几行。
所以,对于初学者来说,这个编译很好:
bool cmp_pair( int l, int r )
{
return l < r;
}
main ()
{
vector<int> v;
binary_search( v.begin(), v.end(), 0, cmp_pair );
return 0;
}
但这不是:
bool cmp_pair( const pair<int,int>& l, const pair<int,int>& r )
{
return l.first < r.first;
}
main ()
{
vector< pair< int, int > > v;
binary_search( v.begin(), v.end(), 0, cmp_pair );
return 0;
}
仿函数也没有帮助:
struct cmp_pair {
bool operator()( const pair<int,int>& l, const pair<int,int>& r )
{
return l.first < r.first;
}
};
main ()
{
vector< pair< int, int > > v;
binary_search( v.begin(), v.end(), 0, cmp_pair() );
return 0;
}
最佳答案
由于您正在对 vector 对进行二进制搜索,因此第三个参数应该是对,因此您的代码应该是这样的:
using namespace std;
bool cmp_pair( const pair<int,int>& l, const pair<int,int>& r )
{
return l.first < r.first;
}
int main ()
{
vector< pair< int, int > > v;
if(binary_search( v.begin(), v.end(), std::make_pair(0,0), cmp_pair ))
{
std::cout<<"found...."<<std::endl;
}
else
{
std::cout<<"not found...."<<std::endl;
}
return 0;
}
你的比较器存在同样的问题
关于c++ STL使用比较谓词/仿函数与容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49891103/