我有一个实数向量,按增加的顺序排序。
这些值可以在[0, 1]范围内。然后,我在这个范围内选择一个值x,我需要找到哪个是较小值的索引,它大于或等于x。
我可以通过遍历整个数组来解决这个问题:
vector<double> values;
double x;
for (auto val : values)
{
    if (x <= values)
    {
        // found
        break;
    }
}有更快的方法来获得同样的结果吗?我在考虑二进制搜索,但是如何实现呢?
发布于 2015-10-31 15:09:00
使用std::lower_bound
#include <iterator>
#include <algorithm>
std::distance(begin(values)
            , std::lower_bound(begin(values), end(values), x));如果该项不存在,它将为您提供一个比最后一个元素更大的索引。
演示
https://stackoverflow.com/questions/33452903
复制相似问题