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


C++ lower_bound用法及代码示例


lower_bound()C++中的方法用于返回一个迭代器,该迭代器指向[first,last)范围内的第一个元素,其值不小于val。这意味着该函数返回一个指向下一个大于或等于该数字的最小数字的迭代器。如果有多个值等于 val,lower_bound() 返回第一个此类值的迭代器。
范围内的元素应已排序或至少已根据 val 进行分区。
模板:

Syntax 1: 
ForwardIterator lower_bound (ForwardIterator first, ForwardIterator last, const T& val); 
Syntax 2: 
ForwardIterator lower_bound (ForwardIterator first, ForwardIterator last, const T& val, Compare comp); 
 

参数:上述方法接受以下参数。

  • first, last: 使用的范围是[first,last),包含first和last之间的所有元素,包括first指向的元素但不包括last指向的元素。
  • val:要在范围内搜索的下限值。
  • comp:二进制函数,接受两个参数(第一个参数为 ForwardIterator 所指向的类型,第二个参数始终为 val),并返回一个可转换为 bool 的值。该函数不得修改其任何参数。这可以是函数指针或函数对象。

返回值:范围内 val 下限的迭代器。如果范围内的所有元素都小于 val,则函数最后返回。如果范围内的所有元素都大于 val,则该函数返回指向第一个元素的指针。
例子:

Input: 10 20 30 40 50
Output: lower_bound for element 30 at index 2

Input: 10 20 30 40 50
Output: lower_bound for element 35 at index 3

Input: 10 20 30 40 50
Output: lower_bound for element 55 at index 5 (Basically, 55 is not present, so it returns end() iterator)

Input: 10 20 30 30 30 40 50
Output: lower_bound for element 30 at index 2

CPP


// CPP program to illustrate 
// std :: lower_bound 
#include <bits/stdc++.h> 
  
// Driver code 
int main() 
{ 
    // Input vector 
    std::vector<int> v{ 10, 20, 30, 30, 30, 40, 50 }; 
  
    // Print vector 
    std::cout << "Vector contains :"; 
    for (unsigned int i = 0; i < v.size(); i++) 
        std::cout << " " << v[i]; 
    std::cout << "\n"; 
  
    std::vector<int>::iterator low1, low2, low3; 
      
    // std :: lower_bound 
    low1 = std::lower_bound(v.begin(), v.end(), 30); 
    low2 = std::lower_bound(v.begin(), v.end(), 35); 
    low3 = std::lower_bound(v.begin(), v.end(), 55); 
  
    // Printing the lower bounds 
    std::cout 
        << "\nlower_bound for element 30 at position : "
        << (low1 - v.begin()); 
    std::cout 
        << "\nlower_bound for element 35 at position : "
        << (low2 - v.begin()); 
    std::cout 
        << "\nlower_bound for element 55 at position : "
        << (low3 - v.begin()); 
  
    return 0; 
} 
输出
Vector contains : 10 20 30 30 30 40 50

lower_bound for element 30 at position : 2
lower_bound for element 35 at position : 5
lower_bound for element 55 at position : 7

时间复杂度:执行的比较次数是对数的。因此,上述方法的时间复杂度为O(logN),其中N = size。 (最后 - 第一个)



相关用法


注:本文由纯净天空筛选整理自佚名大神的英文原创作品 lower_bound in C++。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。