📜  C++中的equal_range(1)

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

C++中的equal_range

equal_range是C++标准库中的一个算法,用于在有序序列中查找一个元素范围。它返回双向迭代器对,分别指向第一个大于或等于该元素的位置和第一个大于该元素的位置。

语法
template <class ForwardIt, class T>
std::pair<ForwardIt,ForwardIt> equal_range(ForwardIt first, ForwardIt last, const T& value);

其中,firstlast是要查找的序列的起始和结尾位置,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)$,适用于大规模的数据查找。