📅  最后修改于: 2023-12-03 14:59:50.229000             🧑  作者: Mango
equal_range
是C++标准库中的一个算法,用于在有序序列中查找一个元素范围。它返回双向迭代器对,分别指向第一个大于或等于该元素的位置和第一个大于该元素的位置。
template <class ForwardIt, class T>
std::pair<ForwardIt,ForwardIt> equal_range(ForwardIt first, ForwardIt last, const T& value);
其中,first
和last
是要查找的序列的起始和结尾位置,value
是要查找的元素。
返回值是一个pair
对象,包含两个迭代器:第一个迭代器指向第一个大于或等于要查找元素的位置,第二个迭代器指向第一个大于要查找元素的位置。
#include <iostream>
#include <vector>
#include <algorithm>
int main()
{
std::vector<int> v{1, 2, 2, 2, 3, 4, 5};
// 在v中查找2的范围
auto range = std::equal_range(v.begin(), v.end(), 2);
std::cout << "范围是从 " << std::distance(v.begin(), range.first)
<< " 到 " << std::distance(v.begin(), range.second) << '\n';
return 0;
}
输出结果为:
范围是从 1 到 4
equal_range
函数要求序列必须是已排序的序列,如果不是有序的序列,则结果是未定义的。可以使用std::sort
函数将序列进行排序。equal_range
函数的实现是二分查找,时间复杂度为$O(log\ n)$,适用于大规模的数据查找。