📜  C++ STL-Set.upper_bound()函数(1)

📅  最后修改于: 2023-12-03 15:29:50.602000             🧑  作者: Mango

C++ STL中的Set和upper_bound()函数

C++中STL(Standard Template Library)的Set容器是一种红黑树实现的集合,可以用于快速查找元素。

Set容器的成员函数包括:insert, erase, find等,而其中一个很有用的函数是upper_bound()。下面我们来介绍一下upper_bound()函数的使用。

upper_bound()函数

upper_bound()函数的作用是在Set容器中查找大于某个元素的第一个位置,并返回该位置的迭代器。也就是说,该函数返回的迭代器指向的元素大于指定元素,但不一定是第一个大于该元素的位置。

upper_bound()函数的定义如下:

set<int>::iterator upper_bound(const int& val) const;

其中,set::iterator是Set容器内部定义的循环迭代器类型,const int& val是要查找的元素。

下面是一个使用upper_bound()函数的示例:

#include <iostream>
#include <set>
using namespace std;

int main() {
    int arr[] = {1, 2, 4, 5, 7, 9, 12};
    set<int> myset(arr, arr + sizeof(arr) / sizeof(int));

    set<int>::iterator it = myset.upper_bound(5);
    if (it == myset.end()) {
        cout << "5 is larger than the largest element of the set" << endl;
    } 
    else {
        cout << "The first element in the set larger than 5 is " << *it << endl;
    }
    return 0;
}

上述代码定义了一个Set容器myset,其中包含了arr数组中的元素,然后使用upper_bound()函数查找在Set容器中大于5的第一个位置,最终输出找到的元素。如果Set容器中没有比5大的元素,则输出“5 is larger than the largest element of the set”这句话。

在上述代码中,upper_bound()函数的返回值是一个迭代器,我们将其赋值给it变量。然后通过判断it是否等于myset.end()来确定是否找到了符合条件的元素。如果it等于myset.end(),则说明没有找到符合条件的元素,因为Set容器中所有元素都小于等于5;否则,*it即为符合条件的元素。

小结

Set容器可以用于快速查找元素,而upper_bound()函数可以用于查找Set容器中大于某个元素的第一个位置。上述示例代码展示了使用upper_bound()函数的方法,可以通过运行该代码来学习和尝试upper_bound()函数的使用。