📅  最后修改于: 2023-12-03 14:39:50.509000             🧑  作者: Mango
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()
函数是一个非常有用的函数,可以帮助我们在一个已排序的序列中快速查找某个元素。
在使用时,需要注意的是该函数要求传入的序列必须是有序的。此外,如果需要查找的元素在序列中存在多个,返回的是一个区间,可以使用迭代器计算这个区间的大小、下标等信息。