📌  相关文章
📜  C++ STL中的二进制搜索功能(binary_search,lower_bound和upper_bound)(1)

📅  最后修改于: 2023-12-03 14:39:52.881000             🧑  作者: Mango

C++ STL中的二进制搜索功能

在编写程序中,经常需要在已排序的序列中查找某个元素。STL提供了三个二进制搜索函数:binary_search、lower_bound和upper_bound。这些函数不仅提高了程序的效率,还减少了我们编写复杂查找算法的工作量。

binary_search

二分查找是一种常见的查找算法,STL中提供了binary_search函数来实现它。binary_search函数返回一个bool类型的值,表示查找的元素是否存在于给定的序列中。

template <class ForwardIterator, class T>
bool binary_search(ForwardIterator first, ForwardIterator last, const T& value);

其中,first和last是表示序列的迭代器,value是要查找的值。如果value存在于序列中,则返回true,否则返回false。

示例代码
#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int main() {
    vector<int> vec{1, 2, 3, 4, 5};
    bool result = binary_search(vec.begin(), vec.end(), 3);
    if (result) {
        cout << "3 exists in vec!" << endl;
    } else {
        cout << "3 does not exist in vec!" << endl;
    }
    return 0;
}

运行结果:

3 exists in vec!
lower_bound

lower_bound函数返回一个迭代器,它指向第一个大于等于给定值的元素。如果给定值比序列中最后一个元素还要大,则返回last迭代器。

template <class ForwardIterator, class T>
ForwardIterator lower_bound(ForwardIterator first, ForwardIterator last, const T& value);

其中,first和last是表示序列的迭代器,value是要查找的值。

示例代码
#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int main() {
    vector<int> vec{1, 2, 2, 3, 4, 5};
    auto it = lower_bound(vec.begin(), vec.end(), 2);
    cout << "The first element greater than or equal to 2 is " << *it << endl;
    return 0;
}

运行结果:

The first element greater than or equal to 2 is 2
upper_bound

upper_bound函数返回一个迭代器,它指向第一个大于给定值的元素。如果给定值比序列中所有元素都要大,则返回last迭代器。

template <class ForwardIterator, class T>
ForwardIterator upper_bound(ForwardIterator first, ForwardIterator last, const T& value);

其中,first和last是表示序列的迭代器,value是要查找的值。

示例代码
#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int main() {
    vector<int> vec{1, 2, 2, 3, 4, 5};
    auto it = upper_bound(vec.begin(), vec.end(), 2);
    cout << "The first element greater than 2 is " << *it << endl;
    return 0;
}

运行结果:

The first element greater than 2 is 3
总结

STL提供了二进制搜索功能,可以大大提高编程效率以及降低编写复杂算法的难度。其中,binary_search函数判断给定值是否存在于序列中,lower_bound函数返回第一个大于等于给定值的元素,upper_bound函数返回第一个大于给定值的元素。