Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

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

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

      [edit template]
       
       
       
      std::multiset
      Member functions
      Non-member functions
      (until C++20)(until C++20)(until C++20)(until C++20)(until C++20)
      Deduction guides(C++17)
       
      (1)
      multiset();
      (until C++11)
      multiset(): multiset(Compare()){}
      (since C++11)
      (constexpr since C++26)
      explicit multiset(const Compare& comp,
                         const Allocator& alloc= Allocator());
      (2)(constexpr since C++26)
      explicit multiset(const Allocator& alloc);
      (3)(since C++11)
      (constexpr since C++26)
      template<class InputIt>

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

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

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

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

               const Compare& comp= Compare(),

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

               const Allocator& alloc)

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

      multiset(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>

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

         : multiset(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.

      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 <iostream>#include <set>#include <string_view> template<typename T>void println(conststd::string_view name,conststd::multiset<T>& ms){std::cout<< name<<": ";for(constauto& element: ms)std::cout<< element<<' ';std::cout<<'\n';} int main(){// (1) Default constructorstd::multiset<int> a;    a.insert(4);    a.insert(3);    a.insert(2);    a.insert(1);    println("a", a); // (4) Range constructorstd::multiset<int> b(a.begin(), a.find(3));    println("b", b); // (6) Copy constructorstd::multiset<int> c(a);    println("c", c); // (8) Move constructorstd::multiset<int> d(std::move(a));    println("d", d); // (10) Initializer list constructorstd::multiset<int> e{3,2,1,2,4,7,3};    println("e", e); // (12) Range constructorconstauto w={"α","β","γ","δ","δ","γ","β","α"};#if __cpp_lib_containers_rangesstd::multiset<std::string> f(std::from_range, w);// overload (12)#elsestd::multiset<std::string> f(w.begin(), w.end());// fallback to (4)#endif    println("f", f);}

      Output:

      a: 1 2 3 4b: 1 2c: 1 2 3 4d: 1 2 3 4e: 1 2 2 3 3 4 7f: α α β β γ γ δ δ

      [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/multiset/multiset&oldid=135716"

      [8]ページ先頭

      ©2009-2025 Movatter.jp