c++ - 寻找 vector 内的项目

标签 c++ sorting c++11 search binary-search

我有一个真实值 vector ,按升序排序。

这些值可以在[0, 1]范围内。然后我在这个范围内选择一个值x,我需要找到大于或等于x的较小值的索引。

我可以通过迭代整个数组来解决这个问题:

vector<double> values;
double x;

for (auto val : values)
{
    if (x <= values)
    {
        // found
        break;
    }
}

有没有更快的方法来获得相同的结果?我正在考虑二分查找,但是如何实现呢?

最佳答案

使用std::lower_bound :

#include <iterator>
#include <algorithm>

std::distance(begin(values)
            , std::lower_bound(begin(values), end(values), x));

如果该项目不存在,它将为您提供一个比最后一个元素大一的索引。

DEMO

关于c++ - 寻找 vector 内的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33452903/

相关文章:

c++ - 将迭代器用作参数时在内部增加迭代器是否安全?

c++ - 头文件中的类定义 C++

c++ - 如何将 `std::chrono::milliseconds` 转换为 `boost::posix_time::milliseconds`

javascript - 下划线多维排序

c++ - 哪个系统软件负责运行时检查

c++ - 迭代器或 reverse_iterator 的一个变量?

java 8流分组按复合变量之和

java - 我应该如何按 ArrayList 中包含的一些整数对它进行排序?

c++11 - 正确使用 c++11 自动初始化语法

c++ - 无法将迭代器传递给 C++ 中的类方法