【问题标题】:c++ stl using compare predicate/functor with containersc ++ stl使用比较谓词/函子与容器
【发布时间】:2018-04-18 04:17:01
【问题描述】:

我已经有几年没有接触过 C++了,所以请多多包涵。 我需要在其他容器的排序向量中进行二进制搜索,比如说对,但无论出于何种原因,我都无法编译几行代码。

所以,对于初学者来说,这编译得很好:

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;
}

Functor 也无济于事:

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;
}

【问题讨论】:

  • 为什么你要传递 0 第三个参数应该是对

标签: c++ arrays vector stl


【解决方案1】:

由于您正在对向量进行二进制搜索,因此第三个参数应该是对,因此您的代码应该是这样的:

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;
}

您的比较器中也存在同样的问题

【讨论】:

  • 大声笑,我知道这很简单。谢谢
猜你喜欢
  • 1970-01-01
  • 2011-08-30
  • 1970-01-01
  • 2016-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多