Movatterモバイル変換


[0]ホーム

URL:


cppreference.com
Namespaces
Variants
    Actions

      std::multimap<Key,T,Compare,Allocator>::multimap

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

      [edit template]
       
       
       
      std::multimap
      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)
      multimap();
      (until C++11)
      multimap(): multimap(Compare()){}
      (since C++11)
      (constexpr since C++26)
      explicit multimap(const Compare& comp,
                         const Allocator& alloc= Allocator());
      (2)(constexpr since C++26)
      explicit multimap(const Allocator& alloc);
      (3)(since C++11)
      (constexpr since C++26)
      template<class InputIt>

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

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

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

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

               const Compare& comp= Compare(),

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

               const Allocator& alloc)

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

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

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

         : multimap(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 <map>#include <utility> struct Point{double x, y;}; struct PointCmp{bool operator()(const Point& lhs,const Point& rhs)const{return lhs.x< rhs.x;// NB. ignores y on purpose}}; template<typename Key,typename Value,typename Cmp>void println(auto rem,conststd::multimap<Key, Value, Cmp>& map){std::cout<< rem<<"{ ";for(auto n{map.size()};constauto& p: map)std::cout<<'['<< p.first<<":"<< p.second<<(--n?"], ":"]");std::cout<<" }\n";} int main(){std::multimap<int,int> m1={{1,1},{2,2},{3,3},{4,4},{4,4},{3,3},{2,2},{1,1}};    println("m1 = ", m1); // Custom comparisonstd::multimap<Point,double, PointCmp> mag{{{5,12},13},{{3,4},5},{{8,15},17},{{3,-3},-1}};for(auto p: mag)std::cout<<"The magnitude of ("<< p.first.x<<", "<< p.first.y<<")"" is "<< p.second<<'\n'; std::cout<<"Construction from a range:\n";using PS=std::pair<int,std::string>;constauto rg={PS{3,"Earth"},{2,"Venus"},{1,"Mercury"},{3,"Moon"}};#if __cpp_lib_containers_rangesstd::multimap<int,std::string> m2(std::from_range, rg);// overload (12)#elsestd::multimap<int,std::string> m2(rg.begin(), rg.end());// fallback to (4)#endif    println("m2 = ", m2);}

      Output:

      m1 = { [1:1], [1:1], [2:2], [2:2], [3:3], [3:3], [4:4], [4:4] }The magnitude of (3, 4) is 5The magnitude of (3, -3) is -1The magnitude of (5, 12) is 13The magnitude of (8, 15) is 17Construction from a range:m2 = { [1:Mercury], [2:Venus], [3:Earth], [3:Moon] }

      [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 requiredKeyandT 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/multimap/multimap&oldid=135727"

      [8]ページ先頭

      ©2009-2025 Movatter.jp