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


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


std::upper_bound()

std::upper_bound() 是一个 STL 库函数,属于算法头库,在一个范围内找到搜索元素的上界。上限表示搜索元素的排序范围中的下一个较大元素。

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

案例:

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

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

用法:

ForwardIterator upper_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 upper_bound()
    sort(arr.begin(), arr.end());

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

    searching_element = 7;

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

    return 0;
}

输出:

Upperr bound of 6:9
Upper bound of 7:9

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

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

ForwardIterator upper_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::upper_bound() function with example in C++ STL。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。