C++ STL 使用比较谓词/函子与容器
c++ stl using compare predicate/functor with containers
我已经有几年没有碰过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;
}
函子也无济于事:
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;
}
由于您正在对对向量进行二叉搜索,因此第三个参数应该是对的,因此您的代码应如下所示:
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中是否有Polyval(Matlab函数)等价物?
- std::condition_variable::wait()如何评估给定的谓词
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- 在C应用程序中运行C++(带有STL)函数
- 如何在 STL 函数中找到传递给谓词的元素的索引?
- C++ STL 使用比较谓词/函子与容器
- 什么 STL 算法可以确定容器中的一个项目是否满足谓词?
- 关于 c++ stl 谓词的实现
- 从给定的STL容器中提取带有给定谓词的元素到另一个容器
- STL中使用的C++自定义比较类型(函数谓词与较少结构)
- 替换由谓词确定的 std::string 中的字符的最 stl-ish 方法是什么
- 是否允许 STL 谓词使用其参数的地址?
- 如何从传递给STL算法的谓词中获取元素的索引
- std::list指针上排序算法的STL谓词
- STL:指针关联排序容器:排序谓词模板
- STL映射和multimap中二元谓词的行为…
- STL算法的谓词
- STL从vector中移除与谓词匹配的第一个元素
- Do STL谓词需要是纯谓词