• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

    最終更新日時(UTC):
    が更新

    履歴 編集

    function template
    <algorithm>

    std::ranges::equal_range

    namespace std::ranges {
      template <forward_iterator I,
                sentinel_for<I> S,
                class T,
                class Proj = identity,
                indirect_strict_weak_order<const T*, projected<I, Proj>> Comp = ranges::less>
      constexpr subrange<I>
        equal_range(I first,
                    S last,
                    const T& value,
                    Comp comp = {},
                    Proj proj = {}); // (1) C++20
    
      template <forward_range R,
                class T,
                class Proj = identity,
                indirect_strict_weak_order<const T*, projected<iterator_t<R>, Proj>> Comp = ranges::less>
      constexpr borrowed_subrange_t<R>
        equal_range(R&& r,
                    const T& value,
                    Comp comp = {},
                    Proj proj = {}); // (2) C++20
    }
    

    概要

    指定した値と等しい範囲を取得する。

    事前条件

    [first,last) の要素 ee < value および !(value < e) 、あるいは comp(e, value) および !comp(value, e) によって区分化されていなければならない。

    また、[first, last) の要素 e は全て暗黙に、e < value!(value < e) または comp(e, value)!comp(value, e) を意味している必要がある。

    戻り値

    {ranges::lower_bound(first, last, value, comp, proj),ranges::upper_bound(first, last, value, comp, proj)}

    計算量

    最大で 2 * log2(last - first) + O(1) 回の比較を行う

    #include <iostream>
    #include <vector>
    #include <algorithm>
    
    int main()
    {
      std::vector<int> v   = {3, 1, 4, 2, 5, 3};
      std::vector<int> v2  = {1, 4, 2, 5};
    
      std::ranges::sort(v);
      std::ranges::sort(v2);
    
      auto result  = std::ranges::equal_range(v, 3);
      auto result2 = std::ranges::equal_range(v2, 3);
    
      std::cout << "size: " << result.size() << std::endl;
      for (int i : result) {
        std::cout << i << std::endl;
      }
      std::cout << std::endl;
    
      std::cout << "size: " << result2.size() << std::endl;
      for (int i : result2) {
        std::cout << i << std::endl;
      }
    }
    

    出力

    size: 2
    3
    3
    
    size: 0
    

    バージョン

    言語

    • C++20

    処理系

    参照