Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::ranges::includes

      From cppreference.com
      <cpp‎ |algorithm‎ |ranges
       
       
      Algorithm library
      Constrained algorithms and algorithms on ranges(C++20)
      Constrained algorithms, e.g.ranges::copy,ranges::sort, ...
      Execution policies(C++17)
      Sorting and related operations
      Partitioning operations
      Sorting operations
      Binary search operations
      (on partitioned ranges)
      Set operations (on sorted ranges)
      Merge operations (on sorted ranges)
      Heap operations
      Minimum/maximum operations
      (C++11)
      (C++17)
      Lexicographical comparison operations
      Permutation operations
      C library
      Numeric operations
      Operations on uninitialized memory
       
      Constrained algorithms
      All names in this menu belong to namespacestd::ranges
      Non-modifying sequence operations
      Modifying sequence operations
      Partitioning operations
      Sorting operations
      Binary search operations (on sorted ranges)
             
             
      Set operations (on sorted ranges)
      Heap operations
      Minimum/maximum operations
      Permutation operations
      Fold operations
      Operations on uninitialized storage
      Return types
       
      Defined in header<algorithm>
      Call signature
      template<std::input_iterator I1,std::sentinel_for<I1> S1,

               std::input_iterator I2,std::sentinel_for<I2> S2,
               class Proj1=std::identity,class Proj2=std::identity,
               std::indirect_strict_weak_order<
                    std::projected<I1, Proj1>,
                    std::projected<I2, Proj2>> Comp=ranges::less>
      constexprbool
          includes( I1 first1, S1 last1, I2 first2, S2 last2,

                    Comp comp={}, Proj1 proj1={}, Proj2 proj2={})
      (1)(since C++20)
      template<ranges::input_range R1,ranges::input_range R2,

               class Proj1=std::identity,class Proj2=std::identity,
               std::indirect_strict_weak_order<
                    std::projected<ranges::iterator_t<R1>, Proj1>,
                    std::projected<ranges::iterator_t<R2>, Proj2>> Comp=ranges::less>
      constexprbool

          includes( R1&& r1, R2&& r2, Comp comp={}, Proj1 proj1={}, Proj2 proj2={})
      (2)(since C++20)
      1) Returnstrue if the projections of the sorted range[first2last2) is asubsequence of the projections of the sorted range[first1last1).
      2) Same as(1), but usesr1 andr2 as the source ranges, as if by usingranges::begin(r1) andranges::begin(r2) asfirst1 andfirst2 respectively, andranges::end(r1) andranges::end(r2) aslast1 andlast2 respectively.

      Both ranges must be sorted with the given comparison functioncomp. A subsequence need not be contiguous.

      The function-like entities described on this page arealgorithm function objects (informally known asniebloids), that is:

      Contents

      [edit]Parameters

      first1, last1 - the iterator-sentinel pair defining the sortedrange of elements to examine
      r1 - the sorted range of elements to examine
      first2, last2 - the iterator-sentinel pair defining the sortedrange of elements to search for
      r2 - the sorted range of elements to search for
      comp - comparison function to apply to the projected elements
      proj1 - projection to apply to the elements in the first range
      proj2 - projection to apply to the elements in the second range

      [edit]Return value

      true if[first2last2) is a subsequence of[first1last1); otherwisefalse.

      [edit]Complexity

      At most\(\scriptsize 2 \cdot (N_1+N_2-1)\)2·(N1+N2-1) comparisons, where\(\scriptsize N_1\)N1 isranges::distance(r1) and\(\scriptsize N_2\)N2 isranges::distance(r2).

      [edit]Possible implementation

      struct includes_fn{template<std::input_iterator I1,std::sentinel_for<I1> S1,std::input_iterator I2,std::sentinel_for<I2> S2,class Proj1=std::identity,class Proj2=std::identity,std::indirect_strict_weak_order<                 std::projected<I1, Proj1>,                 std::projected<I2, Proj2>> Comp=ranges::less>constexprbool operator()(I1 first1, S1 last1, I2 first2, S2 last2,                              Comp comp={}, Proj1 proj1={}, Proj2 proj2={})const{for(; first2!= last2;++first1){if(first1== last1|| comp(*first2,*first1))returnfalse;if(!comp(*first1,*first2))++first2;}returntrue;} template<ranges::input_range R1,ranges::input_range R2,class Proj1=std::identity,class Proj2=std::identity,std::indirect_strict_weak_order<                 std::projected<ranges::iterator_t<R1>, Proj1>,                 std::projected<ranges::iterator_t<R2>, Proj2>> Comp=ranges::less>constexprbool operator()(R1&& r1, R2&& r2, Comp comp={},                              Proj1 proj1={}, Proj2 proj2={})const{return(*this)(ranges::begin(r1),ranges::end(r1),ranges::begin(r2),ranges::end(r2),std::ref(comp),std::ref(proj1),std::ref(proj2));}}; inlineconstexprauto includes= includes_fn{};

      [edit]Example

      Run this code
      #include <algorithm>#include <cctype>#include <initializer_list>#include <iomanip>#include <iostream>#include <locale>#include <string> template<class T>std::ostream& operator<<(std::ostream& os,std::initializer_list<T>const& list){for(os<<"{ ";autoconst& elem: list)        os<< elem<<' ';return os<<"} ";} struct true_false:std::numpunct<char>{std::string do_truename()const{return"? Yes\n";}std::string do_falsename()const{return"? No\n";}}; int main(){std::cout.imbue(std::locale(std::cout.getloc(), new true_false)); auto ignore_case=[](char a,char b){returnstd::tolower(a)<std::tolower(b);}; constauto        a={'a','b','c'},        b={'a','c'},        c={'a','a','b'},        d={'g'},        e={'a','c','g'},        f={'A','B','C'},        z={'a','b','c','f','h','x'}; std::cout<< z<<"includes\n"<<std::boolalpha<< a<< std::ranges::includes(z.begin(), z.end(), a.begin(), a.end())<< b<< std::ranges::includes(z, b)<< c<< std::ranges::includes(z, c)<< d<< std::ranges::includes(z, d)<< e<< std::ranges::includes(z, e)<< f<< std::ranges::includes(z, f, ignore_case);}

      Output:

      { a b c f h x } includes{ a b c } ? Yes{ a c } ? Yes{ a a b } ? No{ g } ? No{ a c g } ? No{ A B C } ? Yes

      [edit]See also

      computes the difference between two sets
      (algorithm function object)[edit]
      searches for the first occurrence of a range of elements
      (algorithm function object)[edit]
      checks if the range contains the given element or subrange
      (algorithm function object)[edit]
      returnstrue if one sequence is a subsequence of another
      (function template)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/algorithm/ranges/includes&oldid=180578"

      [8]ページ先頭

      ©2009-2025 Movatter.jp