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


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