📌  相关文章
📜  C++中的lower_bound

📅  最后修改于: 2021-05-30 18:35:44             🧑  作者: Mango

C++中的lower_bound()方法用于返回一个迭代器,该迭代器指向[first,last)范围内的第一个元素,该元素的值不少于val。这意味着该函数返回下一个最小数字的索引,该索引恰好大于或等于该数字。如果存在多个等于val的值,则lower_bound()返回第一个此类值的索引。
该范围内的元素应已相对于val进行了排序或至少已分区。
范本:

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

  • 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

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 
 
// Driver code
int main()
{
    // Input vector
    std::vector 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::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 =大小。 (最后–首先)

要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程”