📜  C++ STL-algorithm.equal_range()函数(1)

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

C++ STL-algorithm.equal_range()函数
简介

equal_range() 函数是 C++ STL 中的一个算法函数,用于查找一个有序序列中的某个值,返回该值所在区间的起始迭代器和终止迭代器。如果序列中不存在该值,返回一对迭代器,均指向该值可以插入的位置(同时,这对迭代器也构成一个空区间)。

函数原型
template<class ForwardIt, class T>
std::pair<ForwardIt,ForwardIt> equal_range(ForwardIt first, ForwardIt last, const T& value);
参数
  • first:要查找的有序序列的起始位置。
  • last:要查找的有序序列的结束位置。
  • value:要查找的值。
返回值

返回的是一个 std::pair 对象,包含区间的起始和结束迭代器。

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

int main() {
    std::vector<int> v{1, 3, 3, 3, 4, 5};

    auto pair = std::equal_range(v.begin(), v.end(), 3);

    std::cout << "lower bound index: " << std::distance(v.begin(), pair.first) << std::endl;
    std::cout << "upper bound index: " << std::distance(v.begin(), pair.second) << std::endl;

    return 0;
}

此示例中,我们定义了一个 std::vector 对象 v,并在其中存储了一些整数。然后,我们使用 std::equal_range() 函数查找值为 3 的数字。该函数将返回一对迭代器,指向序列 v 中最小的比 3 大的数字和最后一个 3 的下一个位置(即 4 的位置)。我们通过 std::distance() 函数计算了两个下标,分别是 lower bound 和 upper bound。

输出结果:

lower bound index: 1
upper bound index: 4
总结

equal_range() 函数是一个非常有用的函数,可以帮助我们在一个已排序的序列中快速查找某个元素。

在使用时,需要注意的是该函数要求传入的序列必须是有序的。此外,如果需要查找的元素在序列中存在多个,返回的是一个区间,可以使用迭代器计算这个区间的大小、下标等信息。