当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


C++ std::lower_bound()用法及代码示例


std::lower_bound()

std::lower_bound() 是一个 STL 库函数,它属于算法头库,在一个范围内找到搜索元素的下界。下限是指范围内大于或等于搜索元素的最小元素。

假设范围是:[4, 5, 6, 9, 12] 并且搜索元素是6,那么下限是6本身。如果搜索元素为 7,则下限为 9

案例:

  1. 当存在搜索元素时:
    std::lower_bound()将迭代器返回到元素本身
  2. 当搜索元素不存在时:
    1. 如果所有元素都大于搜索元素:
      lower_bound()返回一个迭代器到范围的开始。
    2. 如果所有元素都低于搜索元素:
      lower_bound()返回到范围末尾的迭代器(不存在下限)。
    3. 否则,
      lower_bound()返回一个迭代器到范围的搜索元素(比搜索元素大的最接近的元素)的下一个更大的元素

要使用 lower_bound(),需要对范围进行排序。

用法:

ForwardIterator lower_bound(
    ForwardIterator first, 
    ForwardIterator last, 
    const T& searching_element
    );

参数:

  • ForwardIterator first:iterator 到范围的开始
  • ForwardIterator last:iterator 到范围的末尾
  • const T& searching_elementT是数据类型和searching_element是要找到下界的元素

返回类型:返回类型是范围中找到的下限的迭代器。

C++ 实现:

#include <bits/stdc++.h>
using namespace std;

int main()
{
    vector<int> arr{ 6, 5, 9, 12, 4 };
    //sort before using lower_bound()
    sort(arr.begin(), arr.end());

    int searching_element = 6;
    vector<int>::iterator it;
    it = lower_bound(arr.begin(), arr.end(), searching_element);
    
    //if all eleemnts are smaller than the searching 
    //element then no lower bound exists
    if (it == arr.end()) {
        cout << "No lower bound exists\n";
    }
    else
        cout << "Lower bound of " << searching_element << ":" << *it << endl;

    searching_element = 7;

    it = lower_bound(arr.begin(), arr.end(), searching_element);
    
    //if all eleemnts are smaller than the searching
    //element then no lower bound exists
    if (it == arr.end()) {
        cout << "No lower bound exists\n";
    }
    else
        cout << "Lower bound of " << searching_element << ":" << *it << endl;

    return 0;
}

输出:

Lower bound of 6:6
Lower bound of 7:9

在上面的 lower_bound() 函数中,使用默认比较器运算符 '<' 来比较元素之间。

但是我们有一个扩展版本函数,它使用用户定义的比较器来比较黑白元素。

ForwardIterator lower_bound(
    ForwardIterator first, 
    ForwardIterator last, 
    const T& searching_element, 
    Comparator comp);

参数:

  • ForwardIterator first:iterator 到范围的开始
  • ForwardIterator last:iterator 到范围的末尾
  • const T& searching_elementT是数据类型和searching_element是要找到下界的元素
  • Comparator comp:用户定义的比较器

返回类型:返回类型是范围中找到的下限的迭代器。

如果您有用户定义的数据类型,这会很有帮助。



相关用法


注:本文由纯净天空筛选整理自 std::lower_bound() function with example in C++ STL。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。