繁体   English   中英

按元素的函数搜索upper_bound

[英]search upper_bound by function of element

假设 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&)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM