Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::set<Key,Compare,Allocator>::set

      From cppreference.com
      <cpp‎ |container‎ |set

      [edit template]
       
       
       
       
      (1)
      set();
      (until C++11)
      set(): set(Compare()){}
      (since C++11)
      (constexpr since C++26)
      explicit set(const Compare& comp,
                   const Allocator& alloc= Allocator());
      (2)(constexpr since C++26)
      explicit set(const Allocator& alloc);
      (3)(since C++11)
      (constexpr since C++26)
      template<class InputIt>

      set( InputIt first, InputIt last,
           const Compare& comp= Compare(),

           const Allocator& alloc= Allocator());
      (4)(constexpr since C++26)
      template<class InputIt>

      set( InputIt first, InputIt last,
           const Allocator& alloc)

         : set(first, last, Compare(), alloc){}
      (5)(since C++14)
      (constexpr since C++26)
      set(const set& other);
      (6)(constexpr since C++26)
      set(const set& other,const Allocator& alloc);
      (7)(since C++11)
      (constexpr since C++26)
      set( set&& other);
      (8)(since C++11)
      (constexpr since C++26)
      set( set&& other,const Allocator& alloc);
      (9)(since C++11)
      (constexpr since C++26)
      set(std::initializer_list<value_type> init,

           const Compare& comp= Compare(),

           const Allocator& alloc= Allocator());
      (10)(since C++11)
      (constexpr since C++26)
      set(std::initializer_list<value_type> init,

           const Allocator& alloc)

         : set(init, Compare(), alloc){}
      (11)(since C++14)
      (constexpr since C++26)
      template<container-compatible-range<value_type> R>

      set(std::from_range_t, R&& rg,
           const Compare& comp= Compare(),

           const Allocator& alloc= Allocator());
      (12)(since C++23)
      (constexpr since C++26)
      template<container-compatible-range<value_type> R>

      set(std::from_range_t, R&& rg,
           const Allocator& alloc)

         : set(std::from_range,std::forward<R>(rg), Compare(), alloc){}
      (13)(since C++23)
      (constexpr since C++26)

      Constructs new container from a variety of data sources and optionally using user supplied allocatoralloc or comparison function objectcomp.

      1-3) Constructs an empty container.
      4,5) Constructs the container with the contents of the range[firstlast).
      If[firstlast) is not avalid range, the behavior is undefined.
      6,7) Constructs the container with the copy of the contents ofother.

      Ifalloc is not provided, allocator is obtained by callingstd::allocator_traits<allocator_type>::
          select_on_container_copy_construction(other.get_allocator())
      .

      (since C++11)

      Duringclass template argument deduction, only the first argument contributes to the deduction of the container'sAllocator template parameter.

      (since C++23)
      8,9) Constructs the container with the contents ofother using move semantics. Ifalloc is not provided, allocator is obtained by move-construction from the allocator belonging toother.

      Duringclass template argument deduction, only the first argument contributes to the deduction of the container'sAllocator template parameter.

      (since C++23)
      10,11) Constructs the container with the contents of the initializer listinit.
      12,13) Constructs the container with the contents ofrg.

      Contents

      [edit]Parameters

      alloc - allocator to use for all memory allocations of this container
      comp - comparison function object to use for all comparisons of keys
      first, last - the pair of iterators defining the sourcerange of elements to copy
      other - another container to be used as source to initialize the elements of the container with
      init - initializer list to initialize the elements of the container with
      rg - acontainer compatible range, that is, aninput_range whose elements are convertible tovalue_type
      Type requirements
      -
      InputIt must meet the requirements ofLegacyInputIterator.
      -
      Compare must meet the requirements ofCompare.
      -
      Allocator must meet the requirements ofAllocator.

      [edit]Complexity

      1-3) Constant.
      4,5)\(\scriptsize N \cdot log(N)\)N·log(N) where\(\scriptsize N\)N isstd::distance(first, last) in general, linear in\(\scriptsize N\)N if[firstlast) is already sorted byvalue_comp().
      6,7) Linear in size ofother.
      8,9) Constant. Ifalloc is given andalloc!= other.get_allocator(), then linear.
      10,11)\(\scriptsize N \cdot log(N)\)N·log(N) where\(\scriptsize N\)N isinit.size() in general, linear in\(\scriptsize N\)N ifinit is already sorted byvalue_comp().
      12,13)\(\scriptsize N \cdot log(N)\)N·log(N) where\(\scriptsize N\)N isranges::distance(rg) in general, linear in\(\scriptsize N\)N ifrg is already sorted byvalue_comp().

      [edit]Exceptions

      Calls toAllocator::allocate may throw.

      [edit]Notes

      After container move construction (overload(8,9)), references, pointers, and iterators (other than the end iterator) toother remain valid, but refer to elements that are now in*this. The current standard makes this guarantee via the blanket statement in[container.reqmts]/67, and a more direct guarantee is under consideration viaLWG issue 2321.

      If multiple elements in the range have keys that compare equivalent, it is unspecified which element is inserted (pendingLWG2844).

      Although not formally required until C++23, some implementations has already put the template parameterAllocator intonon-deduced contexts in earlier modes.

      Feature-test macroValueStdFeature
      __cpp_lib_containers_ranges202202L(C++23)Ranges-aware construction and insertion; overloads(12,13)

      [edit]Example

      Run this code
      #include <cmath>#include <iostream>#include <set>#include <string> struct Point{double x, y;}; struct PointCmp{bool operator()(const Point& lhs,const Point& rhs)const{returnstd::hypot(lhs.x, lhs.y)<std::hypot(rhs.x, rhs.y);}}; std::ostream& operator<<(std::ostream& os, Point pt){return os<<'('<< pt.x<<','<< pt.x<<')';} void println(auto rem,constauto& seq){std::cout<< rem<<'{';for(auto n{seq.size()};constauto& elm: seq)std::cout<< elm<<(--n?", ":"");std::cout<<"}\n";} int main(){// (1) Default constructorstd::set<std::string> a;    a.insert("horse");    a.insert("cat");    a.insert("dog");    println("1) a: ", a); // (4) Range constructorstd::set<std::string> b(a.find("dog"), a.end());    println("2) b: ", b); // (6) Copy constructorstd::set<std::string> c(a);    c.insert("another horse");    println("3) c: ", c); // (8) Move constructorstd::set<std::string> d(std::move(a));    println("4) d: ", d);    println("5) a: ", a); // (10) Initializer list constructorstd::set<std::string> e{"one","two","three","five","eight"};    println("6) e: ", e); // Custom comparisonstd::set<Point, PointCmp> f={{2,5},{3,4},{1,1}};    f.insert({1,-1});// This fails because the magnitude of (1,-1) equals (1,1)    println("7) f: ", f); // (12) Range constructorconstauto w={"Eurybia","Theia","Rhea","Aura","Mnemosyne","Mnemosyne"};#if __cpp_lib_containers_rangesstd::set<std::string> g(std::from_range, w);// overload (12)#elsestd::set<std::string> g(w.begin(), w.end());// fallback to (4)#endif    println("8) g: ", g);}

      Possible output:

      1) a: {cat, dog, horse}2) b: {dog, horse}3) c: {another horse, cat, dog, horse}4) d: {cat, dog, horse}5) a: {}6) e: {eight, five, one, three, two}7) f: {(1,1), (3,3), (2,2)}8) g: {Aura, Eurybia, Mnemosyne, Rhea, Theia}

      [edit]Defect reports

      The following behavior-changing defect reports were applied retroactively to previously published C++ standards.

      DRApplied toBehavior as publishedCorrect behavior
      LWG 2076C++11overload(4) conditionally requiredKey to beCopyInsertable into*thisnot required
      LWG 2193C++11the default constructor was explicitmade non-explicit

      [edit]See also

      assigns values to the container
      (public member function)[edit]
      Retrieved from "https://en.cppreference.com/mwiki/index.php?title=cpp/container/set/set&oldid=154696"

      [8]ページ先頭

      ©2009-2025 Movatter.jp