c++ STL使用比较谓词/仿函数与容器

标签 c++ arrays vector stl

我已经有几年没有接触过 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/

相关文章:

c# - Pinvoke 返回 int, API

php - 获取前几个月的最后几天

java - 扩展泛型类时出现 ClassCastException

c++ - 增加容量时,std::vector *有*移动对象吗?或者,分配器可以 "reallocate"吗?

c++ - 节点中的二叉搜索树数据始终为零

c++ - 为什么或在什么情况下,您会在 C++ 中将参数作为引用(或指针)传递给函数?

c++ - 在其他函数中设置结构成员的值

java - 比较数组

c++ - 错误 : non-aggregate type 'vector<string>' cannot be initialized with an initializer list

R:regexpr() 如何在模式参数中使用向量