Przestrzenie nazw
Warianty

std::multimap::multimap

Z cppreference.com
<tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody> <tbody class="t-dcl-rev t-dcl-rev-num "> </tbody><tbody> </tbody>
(1)
explicit multimap( const Compare& comp = Compare(), {{#pad:|17}} const Allocator& alloc = Allocator() );
explicit multimap( const Allocator& alloc );
(1) (od C++11)
(2)
template< class InputIterator > multimap( InputIterator first, InputIterator last, {{#pad:|8}} const Compare& comp = Compare(), {{#pad:|8}} const Allocator& alloc = Allocator() );
multimap( const multimap& other );
(3)
multimap( const multimap& other, const Allocator& alloc );
(3) (od C++11)
multimap( multimap&& other );
(4) (od C++11)
multimap( multimap&& other, const Allocator& alloc );
(4) (od C++11)
(5)
multimap( std::initializer_list<value_type> init, {{#pad:|8}} const Compare& comp = Compare(), {{#pad:|8}} const Allocator& alloc = Allocator() );
(od C++11)

Konstruuje nowy kontener z różnych źródeł danych, opcjonalnie wykorzystując dostarczony przez użytkownika alokator alloc i/lub obiekt funkcji porównującej comp.

1) Domyślny konstruktor. Konstruuje pusty kontener.
2) Konstruktor przedziałowy. Konstruuje kontener z zawartością przedziału [first, last).
3) Konstruktor kopiujący. Konstruuje kontener z kopią zawartości other. If alloc is not provided, allocator is obtained by calling std::allocator_traits<allocator_type>::select_on_container_copy_construction(other.get_allocator()).
4) Konstruktor przenoszący. Constructs the container with the contents of other using move semantics. If alloc is not provided, allocator is obtained by move-construction from the allocator belonging to other.
5) Konstruktor z listy inicjalizacyjnej. Konstruuje kontener z zawartością listy inicjalizacyjnej init.

Parametry

alloc - alokator używany do wszystkich alokacji pamięci wykonywanych przez ten kontener
comp - obiekt funkcji porównującej, wykorzystywany przy wszystkich porównaniach kluczy
first, last - przedział, z którego zostają skopiowane elementy
other - inny kontener, wykorzystywany jako źródło, z którego inicjalizowane są elementy kontenera
init - lista inicjalizacyjna, do zainicjowania wartości elementów kontenera
Wymagania względem typów
-
InputIterator musi spełniać wymagania InputIteratorerator.
-
Compare musi spełniać wymagania Compare.
-
Allocator musi spełniać wymagania Allocator.

Złożoność

1) Stała

2) N log(N), gdzie N = std::distance(first, last) ogólnie, liniowa względem N jeśli przedział jest już posortowany zgodnie z value_comp().

3) Liniowa względem rozmiaru other

4) Stała. Jeśli alloc jest podany i alloc != other.get_allocator(), liniowa.

5) N log(N), gdzie N = init.size()) ogólnie, liniowa względem N jeśli init jest już posortowana zgodnie z value_comp().

Wyjątki

Wywołania Allocator::allocate mogą wyrzucić wyjątki.

Notka

Po skonstruowaniu kontenera przez przeniesienie (przeciążenie (4)), referencje, wskaźniki i iteratory (inne niż "past-the-end") do other pozostają prawidłowe, ale wskazują na elementy znajdujące się teraz w *this. Obecny standard gwarantuje to przez oświadczenie zbiorcze w §23.2.1[container.requirements.general]/12, i bardziej bezpośrednia gwarancja jest wzięta pod uwagę: LWG 2321.

Przykład

#include <iostream>
#include <map>
 
struct Point { double x, y; };
struct PointCmp {
    bool operator()(const Point& lhs, const Point& rhs) const { 
        return lhs.x < rhs.x; // sortuje tylko po pierwszej współrzędnej
    }
};
 
int main() {
    std::multimap<int, int> m = {{1,1},{2,2},{3,3},{4,4},{5,5},{4,4},{3,3},{2,2},{1,1}};
    for(auto& p: m) std::cout << p.first << ' ' << p.second << '\n';

    // porównywanie zdefiniowane przez użytkownika
    std::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';
}

Wynik:

1 1
1 1
2 2
2 2
3 3
3 3
4 4
4 4
5 5
The magnitude of (3, 4) is 5
The magnitude of (3, -3) is -1
The magnitude of (5, 12) is 13
The magnitude of (8, 15) is 17

Zobacz także

przypisuje wartości do kontenera
(publiczna metoda) [edit]