📜  在C++ STL中设置lower_bound()函数(1)

📅  最后修改于: 2023-12-03 14:51:15.009000             🧑  作者: Mango

在C++ STL中设置lower_bound()函数

在C++中,STL(标准模板库)提供了许多方便易用的函数和算法,其中包括了lower_bound()函数。lower_bound()函数可在已排序的范围内查找元素,并返回范围内第一个大于等于给定值的元素的位置,该函数适用于STL中的任何容器,如vector、set、map等。

函数原型

lower_bound()函数的函数原型如下:

template<class ForwardIt, class T>
ForwardIt lower_bound(ForwardIt first, ForwardIt last, const T& value);

其中:

  • ForwardIt:要查找的范围的迭代器类型,通常为指向容器元素的随机访问迭代器。
  • first:起始迭代器,指向要查找的容器中的第一个元素。
  • last:终止迭代器,指向要查找的容器中的最后一个元素(不包含在内,即半开区间)。
  • value:要查找的值。

函数返回一个迭代器,该迭代器指向范围内第一个大于等于给定值的元素。

用法样例
#include <iostream>
#include <vector>
#include <algorithm>

int main() {
    std::vector<int> vec{ 1, 2, 2, 4, 4, 4, 6, 7, 8 };
    int target = 4;

    auto it = std::lower_bound(vec.begin(), vec.end(), target);

    if (it != vec.end() && *it == target) {
        std::cout << "Found " << target << " at index " << std::distance(vec.begin(), it) << std::endl;
    }
    else {
        std::cout << target << " not found" << std::endl;
    }

    return 0;
}

以上代码首先创建了一个整数向量vec,然后定义了一个搜索目标target,并使用lower_bound()函数搜索此目标。最后,如果该目标存在于向量中,则输出该值所在的索引,否则输出“not found”。

注意事项
  • 要使用lower_bound()函数,必须确保容器已按升序排序。否则,函数的行为将不可预测。
  • 如果容器中存在多个等于给定值的元素,则lower_bound()函数只返回第一个出现的元素位置。
  • 如果给定值小于容器中的最小元素,则函数返回容器的起始位置。
结论

lower_bound()函数在查找某个值的位置时非常有用,特别是对于已排序的容器。在需要对排序的数据进行搜索时,它是一个有用的工具。