我有一个T
类,它有一个属性(int f() const
)。我有一个T
的向量,它是根据这个属性排序的。我想对元素执行对数搜索,以找到调用f()
不小于输入的第一个元素。
std::vector<T> v;
// Filling of v
int lob = 1234;
// This next line is an illustration of intent:
std::lower_bound(v.begin(),v.end(),lob
,/* ??? if(element.f() < lob) return true; */ );
解决方法是创建T
的实例,当lob
被调用时,该实例将返回f()
的值。让我们说创建这样的虚拟T
会非常困难。如何在不创建T
的情况下执行此搜索?
我可以写这个问题的对数搜索,但我想知道是否有任何通用解决方案。我对C ++ 11解决方案一直感兴趣。
答案 0 :(得分:3)
在C ++ 11中,您可以将lambda表达式用于比较器:
auto it = std::lower_bound(v.begin(), v.end(), lob,
[](T const & x, int n) { return x.f() < n; });
如果您是功能组合风格的粉丝,您还可以使用嵌套的bind
表达式:
using std::placeholders::_1;
using std::placeholders::_2;
auto it = std::lower_bound(
v.begin(), v.end(), lob,
std::bind(std::less<int>(), std::bind(&T::f, _1), _2));