按元素的功能搜索upper_bound



假设 a 有一个可以计算为整数的类A

我们得到一个A向量作为输入,该向量按其evaluate()值排序。

如何找到评估值的上限?

我试过这个,但它无法编译。

class A;
int evaluate(const A& a);
// ...
vector<A>::iterator foo(vector<A>& v, int k)
{
return upper_bound(v.begin(), v.end(), k,
[](const A& a, int k)
{
return evaluate(a) < k;
}
);
}

虽然其他用户已经正确地指出了这个问题(例如,@StoryTeller"你弄错了lambda中参数的顺序"),但请允许我写下一段在我的机器上编译的代码,供其他观众参考。

#include <algorithm>
#include <iostream>
#include <vector>
class A
{
public:
int data;
A(int data) : data(data) {}
};
int evaluate(const A & a)
{
return a.data;
}
std::vector<A>::iterator foo(std::vector<A> & v, int k)
{
return std::upper_bound(v.begin(), v.end(), k,
[](int k, A & a) { return evaluate(a) > k; });   // first argument always val
}
int main()
{
std::vector<A> vec {36, 42, 57};
std::cout << foo(vec, 42) - vec.begin() << std::endl;   // 2
}

根据C++17标准中的[upper.bound]

。以下相应条件成立:...或comp(value, *j) == false.

这意味着你将收到对comp(你的谓词)的调用,第一个参数是你传递的value;第二个参数是取消引用的迭代器。

换句话说,您可能希望谓词具有类型:

bool (int, const A&)

相关内容

  • 没有找到相关文章

最新更新