當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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++。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。