Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Multimap-klassen C++ StandardBibliotek används för lagring och hämtning av data från en samling där varje element är ett par som har både ett datavärde och en sorteringsnyckel. Värdet för nyckeln behöver inte vara unikt och används för att beställa data automatiskt. Värdet för ett element i en multimapp, men inte dess associerade nyckelvärde, kan ändras direkt. I stället måste nyckelvärden som är associerade med gamla element tas bort och nya nyckelvärden som är associerade med nya element infogas.
Syntax
template <class Key,
class Type,
class Traits=less <Key>,
class Allocator=allocator <pair <const Key, Type>>>
class multimap;
Parameterar
Key
Den nyckeldatatyp som ska lagras i multimappen.
Type
Den elementdatatyp som ska lagras i multimappen.
Traits
Den typ som tillhandahåller ett funktionsobjekt som kan jämföra två elementvärden som sorteringsnycklar för att fastställa deras relativa ordning i multimappen. Det binära predikatet less<Key> är standardvärdet.
I C++14 kan du aktivera heterogen sökning genom att ange eller std::less<>std::greater<> predikat som inte har några typparametrar. Mer information finns i Heterogen sökning i associativa containrar
Allocator
Den typ som representerar det lagrade allokeringsobjektet som kapslar in information om kartans allokering och frigöring av minne. Det här argumentet är valfritt och standardvärdet är allocator<pair <const Key, Type> >.
Anmärkningar
Multimap-klassen för C++-standardbiblioteket är
En associativ container, som en container med variabel storlek som stöder effektiv hämtning av elementvärden baserat på ett associerat nyckelvärde.
Reversibel eftersom det ger dubbelriktade iteratorer för åtkomst till dess element.
Sorterade eftersom dess element sorteras efter nyckelvärden i containern i enlighet med en angiven jämförelsefunktion.
Flera, eftersom dess element inte behöver ha en unik nyckel, så att ett nyckelvärde kan ha många elementdatavärden associerade med den.
Ett par associativ container, eftersom dess elementdatavärden skiljer sig från dess nyckelvärden.
En klassmall, eftersom den funktionalitet som den tillhandahåller är allmän och så oberoende av den specifika typen av data som ingår som element eller nycklar. De datatyper som ska användas för element och nycklar anges i stället som parametrar i klassmallen tillsammans med jämförelsefunktionen och allokeraren.
Iteratorn som tillhandahålls av kartklassen är en dubbelriktad iterator, men klassmedlemsfunktionerna insert och multimap har versioner som tar som mallparametrar en svagare indata-iterator, vars funktionskrav är mer minimala än de som garanteras av klassen av dubbelriktade iteratorer. De olika iteratorbegreppen utgör en familj som är relaterad till förbättringar i deras funktioner. Varje iteratorkoncept har en egen uppsättning krav och de algoritmer som fungerar med dem måste begränsa sina antaganden till de krav som tillhandahålls av den typen av iterator. Det kan antas att en indata-iterator kan derefereras för att referera till ett objekt och att det kan ökas till nästa iterator i sekvensen. Det här är en minimal uppsättning funktioner, men det räcker att kunna tala meningsfullt om en rad iteratorer [First, Last) i kontexten för klassens medlemsfunktioner.
Valet av containertyp bör i allmänhet baseras på vilken typ av sökning och infogning som krävs av programmet. Associativa containrar är optimerade för åtgärder för sökning, infogning och borttagning. Medlemsfunktionerna som uttryckligen stöder dessa åtgärder är effektiva och utför dem i en tid som i genomsnitt är proportionell mot logaritmen för antalet element i containern. Om element infogas ogiltigförklaras inga iteratorer, och om elementen tas bort ogiltigförklaras endast de iteratorer som har pekat på de borttagna elementen.
multimap Ska vara den associativa container som ska väljas när villkoren som associerar värdena med deras nycklar uppfylls av programmet. En modell för den här typen av struktur är en ordnad lista med nyckelord med associerade strängvärden som tillhandahåller till exempel definitioner, där orden inte alltid har definierats unikt. Om nyckelorden i stället var unikt definierade så att nycklarna var unika skulle en karta vara valfri container. Om, å andra sidan, bara listan över ord lagras, skulle en uppsättning vara rätt container. Om flera förekomster av orden tilläts skulle en multiset vara lämplig containerstruktur.
Orderordningen multimap den sekvens som den styr genom att anropa ett lagrat funktionsobjekt av typen key_compare. Det här lagrade objektet är en jämförelsefunktion som kan nås genom att anropa medlemsfunktionen key_comp. I allmänhet behöver elementen bara vara mindre än jämförbara för att fastställa denna ordning, så att det, med tanke på två delar, kan fastställas antingen att de är likvärdiga (i den meningen att ingen av dem är mindre än den andra) eller att den ena är mindre än den andra. Detta resulterar i en ordning mellan de icke-nödvändiga elementen. På ett mer tekniskt sätt är jämförelsefunktionen ett binärt predikat som inducerar en strikt svag ordning i standard matematisk mening. Ett binärt predikat f(x,y) är ett funktionsobjekt som har två argumentobjekt x och y ett returvärde på true eller false. En ordning på en uppsättning är en strikt svag ordning om binärpredikatet är irreflexivt, antisymmetriskt och transitivt och om ekvivalensen är transitiv, där två objekt x och y definieras som likvärdiga när båda f(x,y) och f(y,x) är false. Om det starkare villkoret för likhet mellan nycklar ersätter likvärdighetens, blir ordningen total (i den meningen att alla element sorteras med avseende på varandra) och de nycklar som matchas kommer att vara urskiljbara från varandra.
I C++14 kan du aktivera heterogen sökning genom att ange eller std::less<>std::greater<> predikat som inte har några typparametrar. Mer information finns i Heterogen sökning i associativa containrar .
Medlemmar
Konstruktörer
| Konstruktor | Beskrivning |
|---|---|
multimap |
Konstruerar en multimap som är tom eller som är en kopia av hela eller en del av någon annan multimap. |
Typedefs
| Typnamn | Beskrivning |
|---|---|
allocator_type |
En typ som representerar klassen allocator för objektet multimap. |
const_iterator |
En typ som tillhandahåller en dubbelriktad iterator som kan läsa ett const element i multimap. |
const_pointer |
En typ som ger en pekare till ett const element i en multimap. |
const_reference |
En typ som innehåller en referens till ett const element som lagras i en multimap för att läsa och utföra const åtgärder. |
const_reverse_iterator |
En typ som tillhandahåller en dubbelriktad iterator som kan läsa alla const element i multimap. |
difference_type |
En signerad heltalstyp som kan användas för att representera antalet element i ett multimap i ett intervall mellan element som iteratorer pekar på. |
iterator |
En typ som ger skillnaden mellan två iteratorer som refererar till element inom samma multimap. |
key_compare |
En typ som tillhandahåller ett funktionsobjekt som kan jämföra två sorteringsnycklar för att fastställa den relativa ordningen för två element i multimap. |
key_type |
En typ som beskriver sorteringsnyckelobjektet som utgör varje element i multimap. |
mapped_type |
En typ som representerar datatypen som lagras i en multimap. |
pointer |
En typ som ger en pekare till ett const element i en multimap. |
reference |
En typ som innehåller en referens till ett element som lagras i en multimap. |
reverse_iterator |
En typ som tillhandahåller en dubbelriktad iterator som kan läsa eller ändra ett element i en omvänd multimap. |
size_type |
En osignerad heltalstyp som ger en pekare till ett const element i en multimap. |
value_type |
En typ som tillhandahåller ett funktionsobjekt som kan jämföra två element som sorteringsnycklar för att fastställa deras relativa ordning i multimap. |
Medlemsfunktioner
| Medlemsfunktion | Beskrivning |
|---|---|
begin |
Returnerar en iterator som adresserar det första elementet i multimap. |
cbegin |
Returnerar en const iterator som adresserar det första elementet i multimap. |
cend |
Returnerar en const iterator som adresserar platsen som lyckades med det sista elementet i en multimap. |
clear |
Raderar alla element i en multimap. |
contains
C++20 |
Kontrollerar om det finns ett element med den angivna nyckeln i multimap. |
count |
Returnerar antalet element i en multimap vars nyckel matchar en parameter angiven nyckel. |
crbegin |
Returnerar en const iterator som adresserar det första elementet i en omvänd multimap. |
crend |
Returnerar en const iterator som adresserar platsen som lyckades med det sista elementet i en omvänd multimap. |
emplace |
Infogar ett element som konstruerats på plats i en multimap. |
emplace_hint |
Infogar ett element som är konstruerat på plats i en multimap, med ett placeringstips |
empty |
Testar om en multimap är tom. |
end |
Returnerar en iterator som adresserar platsen som lyckades med det sista elementet i en multimap. |
equal_range |
Hittar det område med element där nyckeln för elementet matchar ett angivet värde. |
erase |
Tar bort ett element eller ett område med element i en multimap från angivna positioner eller tar bort element som matchar en angiven nyckel. |
find |
Returnerar en iterator som adresserar den första platsen för ett element i en multimap som har en nyckel som motsvarar en angiven nyckel. |
get_allocator |
Returnerar en kopia av objektet allocator som används för att konstruera multimap. |
insert |
Infogar ett element eller ett område med element i en multimap. |
key_comp |
Hämtar en kopia av jämförelseobjektet som används för att beställa nycklar i en multimap. |
lower_bound |
Returnerar en iterator till det första elementet i ett multimap som med en nyckel som är lika med eller större än en angiven nyckel. |
max_size |
Returnerar den maximala längden på multimap. |
rbegin |
Returnerar en iterator som adresserar det första elementet i en omvänd multimap. |
rend |
Returnerar en iterator som adresserar platsen som lyckades det sista elementet i en omvänd multimap. |
size |
Returnerar antalet element i multimap. |
swap |
Utbyter elementen i två multimaps. |
upper_bound |
Returnerar en iterator till det första elementet i ett multimap som med en nyckel som är större än en angiven nyckel. |
value_comp |
Medlemsfunktionen returnerar ett funktionsobjekt som avgör ordningen på element i en multimap genom att jämföra deras nyckelvärden. |
| Operatör | Beskrivning |
|---|---|
operator= |
Ersätter elementen i en multimap med en kopia av en annan multimap. |
Kravspecifikation
rubrik:<map>
Namespace:std
Paren ( nyckel, värde) lagras i som multimap objekt av typen pair. Parklassen kräver rubriken <utility>, som automatiskt inkluderas av <map>.
multimap::allocator_type
En typ som representerar allokeringsklassen för multimap-objektet.
typedef Allocator allocator_type;
Exempel
Se exemplet för get_allocator ett exempel med .allocator_type
multimap::begin
Returnerar en iterator som adresserar det första elementet i multimap.
const_iterator begin() const;
iterator begin();
Returvärde
En dubbelriktad iterator som adresserar det första elementet på multimap eller platsen som lyckas med en tom multimap.
Exempel
// multimap_begin.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
multimap <int, int> m1;
multimap <int, int> :: iterator m1_Iter;
multimap <int, int> :: const_iterator m1_cIter;
typedef pair <int, int> Int_Pair;
m1.insert ( Int_Pair ( 0, 0 ) );
m1.insert ( Int_Pair ( 1, 1 ) );
m1.insert ( Int_Pair ( 2, 4 ) );
m1_cIter = m1.begin ( );
cout << "The first element of m1 is " << m1_cIter -> first << endl;
m1_Iter = m1.begin ( );
m1.erase ( m1_Iter );
// The following 2 lines would err as the iterator is const
// m1_cIter = m1.begin ( );
// m1.erase ( m1_cIter );
m1_cIter = m1.begin( );
cout << "First element of m1 is now " << m1_cIter -> first << endl;
}
The first element of m1 is 0
First element of m1 is now 1
multimap::cbegin
Returnerar en const iterator som adresserar det första elementet i intervallet.
const_iterator cbegin() const;
Returvärde
En const dubbelriktad iterator som pekar på det första elementet i intervallet, eller platsen precis utanför slutet av ett tomt intervall (för ett tomt intervall, cbegin() == cend()).
Anmärkningar
Med returvärdet för cbeginkan elementen i intervallet inte ändras.
Du kan använda den här medlemsfunktionen i stället för funktionen begin() medlem för att garantera att returvärdet är const_iterator. Vanligtvis används det tillsammans med nyckelordet auto typavdrag, som du ser i följande exempel. I exemplet bör du överväga att Container vara en ändringsbar (icke-const) container av något slag som stöder begin() och cbegin().
auto i1 = Container.begin();
// i1 is Container<T>::iterator
auto i2 = Container.cbegin();
// i2 is Container<T>::const_iterator
multimap::cend
Returnerar en const iterator som adresserar platsen precis utanför det sista elementet i ett intervall.
const_iterator cend() const;
Returvärde
En const iterator med dubbelriktad åtkomst som pekar precis utanför intervallets slut.
Anmärkningar
cend används för att testa om en iterator har passerat slutet av sitt intervall.
Du kan använda den här medlemsfunktionen i stället för funktionen end() medlem för att garantera att returvärdet är const_iterator. Vanligtvis används det tillsammans med nyckelordet auto typavdrag, som du ser i följande exempel. I exemplet bör du överväga att Container vara en ändringsbar (icke-const) container av något slag som stöder end() och cend().
auto i1 = Container.end();
// i1 is Container<T>::iterator
auto i2 = Container.cend();
// i2 is Container<T>::const_iterator
Värdet som returneras av cend ska inte derefereras.
multimap::clear
Raderar alla element i en multimap.
void clear();
Exempel
I följande exempel visas användningen av multimap::clear medlemsfunktionen.
// multimap_clear.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
multimap<int, int> m1;
multimap<int, int>::size_type i;
typedef pair<int, int> Int_Pair;
m1.insert(Int_Pair(1, 1));
m1.insert(Int_Pair(2, 4));
i = m1.size();
cout << "The size of the multimap is initially "
<< i << "." << endl;
m1.clear();
i = m1.size();
cout << "The size of the multimap after clearing is "
<< i << "." << endl;
}
The size of the multimap is initially 2.
The size of the multimap after clearing is 0.
multimap::const_iterator
En typ som tillhandahåller en dubbelriktad iterator som kan läsa ett const element i multimap.
typedef implementation-defined const_iterator;
Anmärkningar
En typ const_iterator kan inte användas för att ändra värdet för ett element.
Definieras const_iterator av multimap punkter till objekt av value_type, som är av typen pair<const Key, Type>. Värdet för nyckeln är tillgängligt via det första medlemsparet och värdet för det mappade elementet är tillgängligt via den andra medlemmen i paret.
Om du vill avreferering av en const_iteratorcIter pekar på ett element i en multimapanvänder du operatorn -> .
Om du vill komma åt värdet för -nyckeln för elementet använder du cIter->first, vilket motsvarar (*cIter).first. Om du vill komma åt värdet för det mappade datumet för elementet använder du cIter->second, vilket motsvarar (*cIter).second.
Exempel
Se exemplet för begin ett exempel med .const_iterator
multimap::const_pointer
En typ som ger en pekare till ett const element i en multimap.
typedef typename allocator_type::const_pointer const_pointer;
Anmärkningar
En typ const_pointer kan inte användas för att ändra värdet för ett element.
I de flesta fall bör en iterator användas för att komma åt elementen i ett multimap objekt.
multimap::const_reference
En typ som innehåller en referens till ett const element som lagras i en multimap för att läsa och utföra const åtgärder.
typedef typename allocator_type::const_reference const_reference;
Exempel
// multimap_const_ref.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
multimap <int, int> m1;
typedef pair <int, int> Int_Pair;
m1.insert ( Int_Pair ( 1, 10 ) );
m1.insert ( Int_Pair ( 2, 20 ) );
// Declare and initialize a const_reference &Ref1
// to the key of the first element
const int &Ref1 = ( m1.begin( ) -> first );
// The following line would cause an error because the
// non-const_reference can't be used to access the key
// int &Ref1 = ( m1.begin( ) -> first );
cout << "The key of the first element in the multimap is "
<< Ref1 << "." << endl;
// Declare and initialize a reference &Ref2
// to the data value of the first element
int &Ref2 = ( m1.begin( ) -> second );
cout << "The data value of the first element in the multimap is "
<< Ref2 << "." << endl;
}
The key of the first element in the multimap is 1.
The data value of the first element in the multimap is 10.
multimap::const_reverse_iterator
En typ som tillhandahåller en dubbelriktad iterator som kan läsa alla const element i multimap.
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
Anmärkningar
En typ const_reverse_iterator inte kan ändra värdet för ett element och används för att iterera genom multimap i omvänd ordning.
Definieras const_reverse_iterator av multimap punkter till objekt av value_type, som är av typen pair<const Key, Type>. Värdet för nyckeln är tillgängligt via det första medlemsparet och värdet för det mappade elementet är tillgängligt via den andra medlemmen i paret.
Om du vill avreferering av en const_reverse_iteratorcrIter pekar på ett element i en multimapp använder du operatorn -> .
Om du vill komma åt värdet för -nyckeln för elementet använder du crIter->first, vilket motsvarar (*crIter).first. Om du vill komma åt värdet för det mappade datumet för elementet använder du crIter->second, vilket motsvarar (*crIter).first.
Exempel
Se exemplet för rend ett exempel på hur du deklarerar och använder const_reverse_iterator.
multimap::contains
Kontrollera om det finns ett element med den angivna nyckeln i multimap.
bool contains(const Key& key) const;
template<class K> bool contains(const K& key) const;
Parameterar
K
Typ av nyckel.
key
Elementets nyckelvärde att söka efter.
Returvärde
true om elementet finns i containern. false annars.
Anmärkningar
contains() är nytt i C++20. Om du vill använda den anger du alternativet /std:c++20 eller senare kompilator.
template<class K> bool contains(const K& key) const deltar endast i överbelastningsmatchning om key_compare är transparent. Mer information finns i Heterogen sökning i associativa containrar .
Exempel
// Requires /std:c++20 or later
#include <map>
#include <string>
#include <iostream>
#include <functional>
int main()
{
std::multimap<int, bool> m = {{0, false}, {1, true}};
std::cout << std::boolalpha; // so booleans show as 'true' or 'false'
std::cout << m.contains(1) << '\n';
std::cout << m.contains(2) << '\n';
// call template function
std::multimap<std::string, int, std::less<>> m2 = {{"ten", 10}, {"twenty", 20}, {"thirty", 30}};
std::cout << m2.contains("ten");
return 0;
}
true
false
true
multimap::count
Returnerar antalet element i en multimap vars nycklar matchar en parameter angiven nyckel.
size_type count(const Key& key) const;
Parameterar
key
Nyckeln för de element som ska matchas från multimappen.
Returvärde
Antalet element vars sorteringsnycklar matchar parameternyckeln. 0 om multimappen inte innehåller ett element med en matchande nyckel.
Anmärkningar
Medlemsfunktionen returnerar antalet element i intervallet
lower_bound(key), upper_bound(key)
som har ett nyckelvärde key.
Exempel
I följande exempel visas hur funktionen multimap::count member används.
// multimap_count.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
multimap<int, int> m1;
multimap<int, int>::size_type i;
typedef pair<int, int> Int_Pair;
m1.insert(Int_Pair(1, 1));
m1.insert(Int_Pair(2, 1));
m1.insert(Int_Pair(1, 4));
m1.insert(Int_Pair(2, 1));
// Elements don't need to have unique keys in multimap,
// so duplicates are allowed and counted
i = m1.count(1);
cout << "The number of elements in m1 with a sort key of 1 is: "
<< i << "." << endl;
i = m1.count(2);
cout << "The number of elements in m1 with a sort key of 2 is: "
<< i << "." << endl;
i = m1.count(3);
cout << "The number of elements in m1 with a sort key of 3 is: "
<< i << "." << endl;
}
The number of elements in m1 with a sort key of 1 is: 2.
The number of elements in m1 with a sort key of 2 is: 2.
The number of elements in m1 with a sort key of 3 is: 0.
multimap::crbegin
Returnerar en const iterator som adresserar det första elementet i en omvänd multimap.
const_reverse_iterator crbegin() const;
Returvärde
En const omvänd dubbelriktad iterator som adresserar det första elementet i en omvänd multimap eller adresserar vad som hade varit det sista elementet i det oreverserade multimap.
Anmärkningar
crbegin används med omvända multimap precis som begin används med en multimap.
Med returvärdet för crbeginkan multimap-objektet inte ändras.
crbegin kan användas för att iterera genom en multimap bakåt.
Exempel
// multimap_crbegin.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
multimap <int, int> m1;
multimap <int, int> :: const_reverse_iterator m1_crIter;
typedef pair <int, int> Int_Pair;
m1.insert ( Int_Pair ( 1, 10 ) );
m1.insert ( Int_Pair ( 2, 20 ) );
m1.insert ( Int_Pair ( 3, 30 ) );
m1_crIter = m1.crbegin( );
cout << "The first element of the reversed multimap m1 is "
<< m1_crIter -> first << "." << endl;
}
The first element of the reversed multimap m1 is 3.
multimap::crend
Returnerar en const iterator som adresserar platsen som lyckades med det sista elementet i en omvänd multimap.
const_reverse_iterator crend() const;
Returvärde
En const omvänd dubbelriktad iterator som adresserar platsen som lyckades med det sista elementet i en omvänd multimap (platsen som hade föregått det första elementet i det oreverserade multimap).
Anmärkningar
crend används med omvända multimap precis som multimap::end används med en multimap.
Med returvärdet för crendkan multimap-objektet inte ändras.
crend kan användas för att testa om en omvänd iterator har nått slutet av sin multimap.
Värdet som returneras av crend ska inte derefereras.
Exempel
// multimap_crend.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
multimap <int, int> m1;
multimap <int, int> :: const_reverse_iterator m1_crIter;
typedef pair <int, int> Int_Pair;
m1.insert ( Int_Pair ( 1, 10 ) );
m1.insert ( Int_Pair ( 2, 20 ) );
m1.insert ( Int_Pair ( 3, 30 ) );
m1_crIter = m1.crend( );
m1_crIter--;
cout << "The last element of the reversed multimap m1 is "
<< m1_crIter -> first << "." << endl;
}
The last element of the reversed multimap m1 is 1.
multimap::difference_type
En signerad heltalstyp som kan användas för att representera antalet element i ett multimap i ett intervall mellan element som iteratorer pekar på.
typedef typename allocator_type::difference_type difference_type;
Anmärkningar
difference_type är den typ som returneras när du subtraherar eller ökar genom iteratorer i containern.
difference_type Används vanligtvis för att representera antalet element i intervallet [first, last) mellan iteratorerna och first, innehåller elementet som pekas på av last och intervallet av element upp till, men inte inklusive, elementet som pekas first på av last.
Även om difference_type det är tillgängligt för alla iteratorer som uppfyller kraven för en indata-iterator, vilket inkluderar klassen av dubbelriktade iteratorer som stöds av reversibla containrar som set, stöds subtraktion mellan iteratorer endast av iteratorer med slumpmässig åtkomst som tillhandahålls av en container med slumpmässig åtkomst, till exempel vektor.
Exempel
// multimap_diff_type.cpp
// compile with: /EHsc
#include <iostream>
#include <map>
#include <algorithm>
int main( )
{
using namespace std;
multimap <int, int> m1;
typedef pair <int, int> Int_Pair;
m1.insert ( Int_Pair ( 2, 20 ) );
m1.insert ( Int_Pair ( 1, 10 ) );
m1.insert ( Int_Pair ( 3, 20 ) );
// The following will insert as multimap keys are not unique
m1.insert ( Int_Pair ( 2, 30 ) );
multimap <int, int>::iterator m1_Iter, m1_bIter, m1_eIter;
m1_bIter = m1.begin( );
m1_eIter = m1.end( );
// Count the number of elements in a multimap
multimap <int, int>::difference_type df_count = 0;
m1_Iter = m1.begin( );
while ( m1_Iter != m1_eIter )
{
df_count++;
m1_Iter++;
}
cout << "The number of elements in the multimap m1 is: "
<< df_count << "." << endl;
}
The number of elements in the multimap m1 is: 4.
multimap::emplace
Infogar ett element som skapats på plats (inga kopierings- eller flyttåtgärder utförs).
template <class... Args>
iterator emplace(Args&&... args);
Parameterar
args
Argumenten som vidarebefordras för att konstruera ett element som ska infogas i multimap.
Returvärde
En iterator till det nyligen infogade elementet.
Anmärkningar
Inga referenser till containerelement har ogiltigförklarats av den här funktionen, men alla iteratorer kan ogiltigförklaras i containern.
Om ett undantag utlöses under infogningen lämnas containern oförändrad och undantaget ändras.
value_type för ett element är ett par, så att värdet för ett element blir ett ordnat par med den första komponenten lika med nyckelvärdet och den andra komponenten som är lika med elementets datavärde.
Exempel
// multimap_emplace.cpp
// compile with: /EHsc
#include <map>
#include <string>
#include <iostream>
using namespace std;
template <typename M> void print(const M& m) {
cout << m.size() << " elements: " << endl;
for (const auto& p : m) {
cout << "(" << p.first << "," << p.second << ") ";
}
cout << endl;
}
int main()
{
multimap<string, string> m1;
m1.emplace("Anna", "Accounting");
m1.emplace("Bob", "Accounting");
m1.emplace("Carmine", "Engineering");
cout << "multimap modified, now contains ";
print(m1);
cout << endl;
m1.emplace("Bob", "Engineering");
cout << "multimap modified, now contains ";
print(m1);
cout << endl;
}
multimap::emplace_hint
Infogar ett element som är konstruerat på plats (inga kopierings- eller flyttåtgärder utförs) med ett placeringstips.
template <class... Args>
iterator emplace_hint(
const_iterator where,
Args&&... args);
Parameterar
args
Argumenten som vidarebefordras för att konstruera ett element som ska infogas i multimap.
where
Platsen där du vill börja söka efter rätt insättningspunkt. (Om den punkten omedelbart föregår wherekan infogning ske i amorterad konstant tid i stället för logaritmisk tid.)
Returvärde
En iterator till det nyligen infogade elementet.
Anmärkningar
Inga referenser till containerelement har ogiltigförklarats av den här funktionen, men alla iteratorer kan ogiltigförklaras i containern.
Om ett undantag utlöses under emplacement ändras inte containerns tillstånd.
value_type för ett element är ett par, så att värdet för ett element blir ett ordnat par med den första komponenten lika med nyckelvärdet och den andra komponenten som är lika med elementets datavärde.
Ett kodexempel finns i map::emplace_hint.
multimap::empty
Testar om en multimap är tom.
bool empty() const;
Returvärde
true om är multimap tom; false om är multimap nonempty.
Exempel
// multimap_empty.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
multimap <int, int> m1, m2;
typedef pair <int, int> Int_Pair;
m1.insert ( Int_Pair ( 1, 1 ) );
if ( m1.empty( ) )
cout << "The multimap m1 is empty." << endl;
else
cout << "The multimap m1 is not empty." << endl;
if ( m2.empty( ) )
cout << "The multimap m2 is empty." << endl;
else
cout << "The multimap m2 is not empty." << endl;
}
The multimap m1 is not empty.
The multimap m2 is empty.
multimap::end
Returnerar iteratorn past-the-end.
const_iterator end() const;
iterator end();
Returvärde
Iteratorn past-the-end. Om multimap är tom multimap::end() == multimap::begin().
Anmärkningar
end används för att testa om en iterator har klarat slutet av sin multimap.
Värdet som returneras av end ska inte derefereras.
Ett kodexempel finns i multimap::find.
multimap::equal_range
Hittar det område med element där nyckeln för elementet matchar ett angivet värde.
pair <const_iterator, const_iterator> equal_range (const Key& key) const;
pair <iterator, iterator> equal_range (const Key& key);
Parameterar
key
Argumentnyckeln som ska jämföras med sorteringsnyckeln för ett element från den multimap som genomsöks.
Returvärde
Ett par iteratorer så att den första är lower_bound nyckelns och den andra är upper_bound nyckelns.
Om du vill komma åt den första iteratorn för ett par pr som returneras av medlemsfunktionen använder pr.first du och för att avreferering av iteratorn med lägre gräns använder *(pr.first)du . Om du vill komma åt den andra iteratorn för ett par pr som returneras av medlemsfunktionen använder pr.second du och för att avreferering av iteratorn med övre gräns använder *(pr.second)du .
Exempel
// multimap_equal_range.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
typedef multimap <int, int, less<int> > IntMMap;
IntMMap m1;
multimap <int, int> :: const_iterator m1_RcIter;
typedef pair <int, int> Int_Pair;
m1.insert ( Int_Pair ( 1, 10 ) );
m1.insert ( Int_Pair ( 2, 20 ) );
m1.insert ( Int_Pair ( 3, 30 ) );
pair <IntMMap::const_iterator, IntMMap::const_iterator> p1, p2;
p1 = m1.equal_range( 2 );
cout << "The lower bound of the element with "
<< "a key of 2 in the multimap m1 is: "
<< p1.first -> second << "." << endl;
cout << "The upper bound of the element with "
<< "a key of 2 in the multimap m1 is: "
<< p1.second -> second << "." << endl;
// Compare the upper_bound called directly
m1_RcIter = m1.upper_bound( 2 );
cout << "A direct call of upper_bound( 2 ) gives "
<< m1_RcIter -> second << "," << endl
<< "matching the 2nd element of the pair "
<< "returned by equal_range( 2 )." << endl;
p2 = m1.equal_range( 4 );
// If no match is found for the key,
// both elements of the pair return end( )
if ( ( p2.first == m1.end( ) ) && ( p2.second == m1.end( ) ) )
cout << "The multimap m1 doesn't have an element "
<< "with a key less than 4." << endl;
else
cout << "The element of multimap m1 with a key >= 40 is: "
<< p1.first -> first << "." << endl;
}
The lower bound of the element with a key of 2 in the multimap m1 is: 20.
The upper bound of the element with a key of 2 in the multimap m1 is: 30.
A direct call of upper_bound( 2 ) gives 30,
matching the 2nd element of the pair returned by equal_range( 2 ).
The multimap m1 doesn't have an element with a key less than 4.
multimap::erase
Tar bort ett element eller ett område med element i en multimap från angivna positioner eller tar bort element som matchar en angiven nyckel.
iterator erase(
const_iterator Where);
iterator erase(
const_iterator First,
const_iterator Last);
size_type erase(
const key_type& Key);
Parameterar
Where
Positionen för elementet som ska tas bort.
First
Positionen för det första elementet som ska tas bort.
Last
Placera precis utanför det sista elementet som ska tas bort.
Key
Nyckeln för de element som ska tas bort.
Returvärde
För de två första medlemsfunktionerna, en dubbelriktad iterator som anger det första elementet som återstår utöver alla element som tas bort, eller ett element som är slutet på kartan om det inte finns något sådant element.
För den tredje medlemsfunktionen returnerar antalet element som har tagits bort från multimap.
Anmärkningar
Ett kodexempel finns i map::erase.
multimap::find
Returnerar en iterator som refererar till den första platsen för ett element i en multimap som har en nyckel som motsvarar en angiven nyckel.
iterator find(const Key& key);
const_iterator find(const Key& key) const;
Parameterar
key
Nyckelvärdet som ska matchas av sorteringsnyckeln för ett element från det multimap som genomsöks.
Returvärde
En iterator som refererar till platsen för ett element med en angiven nyckel eller platsen som lyckas med det sista elementet i multimap (multimap::end()) om ingen matchning hittas för nyckeln.
Anmärkningar
Medlemsfunktionen returnerar en iterator som refererar till ett element i multimap vars sorteringsnyckel motsvarar argumentnyckeln under ett binärt predikat som inducerar en ordning baserat på en relation som är mindre än jämförbar.
Om returvärdet för find har tilldelats till en const_iteratorkan multimap-objektet inte ändras. Om returvärdet för find har tilldelats till en iteratorkan multimap-objektet ändras.
Exempel
// compile with: /EHsc /W4 /MTd
#include <map>
#include <iostream>
#include <vector>
#include <string>
#include <utility> // make_pair()
using namespace std;
template <typename A, typename B> void print_elem(const pair<A, B>& p) {
cout << "(" << p.first << ", " << p.second << ") ";
}
template <typename T> void print_collection(const T& t) {
cout << t.size() << " elements: ";
for (const auto& p : t) {
print_elem(p);
}
cout << endl;
}
template <typename C, class T> void findit(const C& c, T val) {
cout << "Trying find() on value " << val << endl;
auto result = c.find(val);
if (result != c.end()) {
cout << "Element found: "; print_elem(*result); cout << endl;
} else {
cout << "Element not found." << endl;
}
}
int main()
{
multimap<int, string> m1({ { 40, "Zr" }, { 45, "Rh" } });
cout << "The starting multimap m1 is (key, value):" << endl;
print_collection(m1);
vector<pair<int, string>> v;
v.push_back(make_pair(43, "Tc"));
v.push_back(make_pair(41, "Nb"));
v.push_back(make_pair(46, "Pd"));
v.push_back(make_pair(42, "Mo"));
v.push_back(make_pair(44, "Ru"));
v.push_back(make_pair(44, "Ru")); // attempt a duplicate
cout << "Inserting the following vector data into m1:" << endl;
print_collection(v);
m1.insert(v.begin(), v.end());
cout << "The modified multimap m1 is (key, value):" << endl;
print_collection(m1);
cout << endl;
findit(m1, 45);
findit(m1, 6);
}
multimap::get_allocator
Returnerar en kopia av allokeringsobjektet som används för att konstruera multimap.
allocator_type get_allocator() const;
Returvärde
Allokeraren som används av multimap.
Anmärkningar
Allokerare för klassen multimap anger hur klassen hanterar lagring. Standardallokeringsprogrammen som levereras med C++ Standard Library-containerklasser räcker för de flesta programmeringsbehov. Att skriva och använda din egen allokeringsklass är ett avancerat C++-ämne.
Exempel
// multimap_get_allocator.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
multimap <int, int>::allocator_type m1_Alloc;
multimap <int, int>::allocator_type m2_Alloc;
multimap <int, double>::allocator_type m3_Alloc;
multimap <int, int>::allocator_type m4_Alloc;
// The following lines declare objects
// that use the default allocator.
multimap <int, int> m1;
multimap <int, int, allocator<int> > m2;
multimap <int, double, allocator<double> > m3;
m1_Alloc = m1.get_allocator( );
m2_Alloc = m2.get_allocator( );
m3_Alloc = m3.get_allocator( );
cout << "The number of integers that can be allocated"
<< endl << "before free memory is exhausted: "
<< m2.max_size( ) << ".\n" << endl;
cout << "The number of doubles that can be allocated"
<< endl << "before free memory is exhausted: "
<< m3.max_size( ) << ".\n" << endl;
// The following line creates a multimap m4
// with the allocator of multimap m1.
map <int, int> m4( less<int>( ), m1_Alloc );
m4_Alloc = m4.get_allocator( );
// Two allocators are interchangeable if
// storage allocated from each can be
// deallocated via the other
if( m1_Alloc == m4_Alloc )
{
cout << "The allocators are interchangeable."
<< endl;
}
else
{
cout << "The allocators are not interchangeable."
<< endl;
}
}
multimap::insert
Infogar ett element eller ett område med element i en multimap.
// (1) single element
pair<iterator, bool> insert(
const value_type& Val);
// (2) single element, perfect forwarded
template <class ValTy>
pair<iterator, bool>
insert(
ValTy&& Val);
// (3) single element with hint
iterator insert(
const_iterator Where,
const value_type& Val);
// (4) single element, perfect forwarded, with hint
template <class ValTy>
iterator insert(
const_iterator Where,
ValTy&& Val);
// (5) range
template <class InputIterator>
void insert(
InputIterator First,
InputIterator Last);
// (6) initializer list
void insert(
initializer_list<value_type>
IList);
Parameterar
Val
Värdet för ett element som ska infogas i multimap.
Where
Platsen där du vill börja söka efter rätt insättningspunkt. (Om den punkten omedelbart föregår Wherekan infogning ske i amorterad konstant tid i stället för logaritmisk tid.)
ValTy
Mallparameter som anger den argumenttyp som kartan kan använda för att konstruera ett element av value_type, och perfekt vidarebefordran Val som ett argument.
First
Positionen för det första element som ska kopieras.
Last
Positionen precis utanför det sista element som ska kopieras.
InputIterator
Mallfunktionsargument som uppfyller kraven för en input iterator som pekar på element av en typ som kan användas för att konstruera value_type objekt.
IList
Den initializer_list som elementen ska kopieras från.
Returvärde
Medlemsfunktionerna single-element-insert, (1) och (2), returnerar en iterator till den position där det nya elementet infogades i multimap.
Medlemsfunktionerna single-element-with-hint, (3) och (4), returnerar en iterator som pekar på positionen där det nya elementet infogades i multimap.
Anmärkningar
Inga pekare eller referenser har ogiltigförklarats av den här funktionen, men alla iteratorer kan ogiltigförklaras i containern.
Om ett undantag utlöses under infogningen av bara ett element ändras inte containerns tillstånd. Om ett undantag utlöses under införandet av flera element lämnas containern i ett ospecificerat men giltigt tillstånd.
value_type för en container är en typedef som tillhör containern, och för mappning är multimap<K, V>::value_typepair<const K, V>. Värdet för ett element är ett ordnat par där den första komponenten är lika med nyckelvärdet och den andra komponenten är lika med elementets datavärde.
Funktionen range member (5) infogar sekvensen med elementvärden i en multimap som motsvarar varje element som hanteras av en iterator i intervallet [First, Last). Därför Last infogas inte. Funktionen end() containermedlem refererar till positionen strax efter det sista elementet i containern, till exempel infogar instruktionen m.insert(v.begin(), v.end()); alla element v i i m.
Medlemsfunktionen i initieringslistan (6) använder en initializer_list för att kopiera element till kartan.
För infogning av ett element som konstruerats på plats, dvs. inga kopierings- eller flyttåtgärder utförs, se multimap::emplace och multimap::emplace_hint.
Exempel
// multimap_insert.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
#include <string>
#include <vector>
#include <utility> // make_pair()
using namespace std;
template <typename M> void print(const M& m) {
cout << m.size() << " elements: ";
for (const auto& p : m) {
cout << "(" << p.first << ", " << p.second << ") ";
}
cout << endl;
}
int main()
{
// insert single values
multimap<int, int> m1;
// call insert(const value_type&) version
m1.insert({ 1, 10 });
// call insert(ValTy&&) version
m1.insert(make_pair(2, 20));
cout << "The original key and mapped values of m1 are:" << endl;
print(m1);
// intentionally attempt a duplicate, single element
m1.insert(make_pair(1, 111));
cout << "The modified key and mapped values of m1 are:" << endl;
print(m1);
// single element, with hint
m1.insert(m1.end(), make_pair(3, 30));
cout << "The modified key and mapped values of m1 are:" << endl;
print(m1);
cout << endl;
// The templatized version inserting a jumbled range
multimap<int, int> m2;
vector<pair<int, int>> v;
v.push_back(make_pair(43, 294));
v.push_back(make_pair(41, 262));
v.push_back(make_pair(45, 330));
v.push_back(make_pair(42, 277));
v.push_back(make_pair(44, 311));
cout << "Inserting the following vector data into m2:" << endl;
print(v);
m2.insert(v.begin(), v.end());
cout << "The modified key and mapped values of m2 are:" << endl;
print(m2);
cout << endl;
// The templatized versions move-constructing elements
multimap<int, string> m3;
pair<int, string> ip1(475, "blue"), ip2(510, "green");
// single element
m3.insert(move(ip1));
cout << "After the first move insertion, m3 contains:" << endl;
print(m3);
// single element with hint
m3.insert(m3.end(), move(ip2));
cout << "After the second move insertion, m3 contains:" << endl;
print(m3);
cout << endl;
multimap<int, int> m4;
// Insert the elements from an initializer_list
m4.insert({ { 4, 44 }, { 2, 22 }, { 3, 33 }, { 1, 11 }, { 5, 55 } });
cout << "After initializer_list insertion, m4 contains:" << endl;
print(m4);
cout << endl;
}
multimap::iterator
En typ som tillhandahåller en dubbelriktad iterator som kan läsa eller ändra alla element i en multimap.
typedef implementation-defined iterator;
Anmärkningar
Definieras iterator av multimap punkter till objekt av value_type, som är av typen pair<const Key, Type>. Värdet för nyckeln är tillgängligt via det första medlemsparet och värdet för det mappade elementet är tillgängligt via den andra medlemmen i paret.
Om du vill avreferering av en iteratorIter pekar på ett element i en multimapanvänder du operatorn -> .
Om du vill komma åt värdet för -nyckeln för elementet använder du Iter->first, vilket motsvarar (*Iter).first. Om du vill komma åt värdet för det mappade datumet för elementet använder du Iter->second, vilket motsvarar (*Iter).second.
En typ iterator kan användas för att ändra värdet för ett element.
Exempel
Se exemplet för begin ett exempel på hur du deklarerar och använder iterator.
multimap::key_comp
Hämtar en kopia av jämförelseobjektet som används för att beställa nycklar i en multimap.
key_compare key_comp() const;
Returvärde
Returnerar det funktionsobjekt som används multimap för att sortera dess element.
Anmärkningar
Det lagrade objektet definierar medlemsfunktionen
bool operator( const Key& x, const Key& y);
som returnerar true om x strikt föregår y i sorteringsordningen.
Exempel
// multimap_key_comp.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
multimap <int, int, less<int> > m1;
multimap <int, int, less<int> >::key_compare kc1 = m1.key_comp( ) ;
bool result1 = kc1( 2, 3 ) ;
if( result1 == true )
{
cout << "kc1( 2,3 ) returns value of true, "
<< "where kc1 is the function object of m1."
<< endl;
}
else
{
cout << "kc1( 2,3 ) returns value of false "
<< "where kc1 is the function object of m1."
<< endl;
}
multimap <int, int, greater<int> > m2;
multimap <int, int, greater<int> >::key_compare kc2 = m2.key_comp( );
bool result2 = kc2( 2, 3 ) ;
if( result2 == true )
{
cout << "kc2( 2,3 ) returns value of true, "
<< "where kc2 is the function object of m2."
<< endl;
}
else
{
cout << "kc2( 2,3 ) returns value of false, "
<< "where kc2 is the function object of m2."
<< endl;
}
}
kc1( 2,3 ) returns value of true, where kc1 is the function object of m1.
kc2( 2,3 ) returns value of false, where kc2 is the function object of m2.
multimap::key_compare
En typ som tillhandahåller ett funktionsobjekt som kan jämföra två sorteringsnycklar för att fastställa den relativa ordningen för två element i multimap.
typedef Traits key_compare;
Anmärkningar
key_compare är synonymt med mallparametern Traits.
Mer information om Traitsfinns i multimap avsnittet Klass .
Exempel
Se exemplet för key_comp ett exempel på hur du deklarerar och använder key_compare.
multimap::key_type
En typ som beskriver sorteringsnyckelobjektet som utgör varje element i multimap.
typedef Key key_type;
Anmärkningar
key_type är synonymt med mallparametern Key.
Mer information om Keyfinns i avsnittet Kommentarer i multimap ämnet Klass .
Exempel
Se exemplet för value_type ett exempel på hur du deklarerar och använder key_type.
multimap::lower_bound
Returnerar en iterator till det första elementet i ett multimap som med en nyckel som är lika med eller större än en angiven nyckel.
iterator lower_bound(const Key& key);
const_iterator lower_bound(const Key& key) const;
Parameterar
key
Argumentnyckeln som ska jämföras med sorteringsnyckeln för ett element från den multimap som genomsöks.
Returvärde
En iterator eller const_iterator som adresserar platsen för ett element i en multimap som med en nyckel som är lika med eller större än argumentnyckeln, eller som adresserar platsen som lyckas med det sista elementet i multimap om ingen matchning hittas för nyckeln.
Om returvärdet för lower_bound har tilldelats till en const_iteratorkan multimap-objektet inte ändras. Om returvärdet lower_bound för tilldelas till en iteratormultimap kan objektet ändras.
Exempel
// multimap_lower_bound.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
multimap <int, int> m1;
multimap <int, int> :: const_iterator m1_AcIter, m1_RcIter;
typedef pair <int, int> Int_Pair;
m1.insert ( Int_Pair ( 1, 10 ) );
m1.insert ( Int_Pair ( 2, 20 ) );
m1.insert ( Int_Pair ( 3, 20 ) );
m1.insert ( Int_Pair ( 3, 30 ) );
m1_RcIter = m1.lower_bound( 2 );
cout << "The element of multimap m1 with a key of 2 is: "
<< m1_RcIter -> second << "." << endl;
m1_RcIter = m1.lower_bound( 3 );
cout << "The first element of multimap m1 with a key of 3 is: "
<< m1_RcIter -> second << "." << endl;
// If no match is found for the key, end( ) is returned
m1_RcIter = m1.lower_bound( 4 );
if ( m1_RcIter == m1.end( ) )
cout << "The multimap m1 doesn't have an element "
<< "with a key of 4." << endl;
else
cout << "The element of multimap m1 with a key of 4 is: "
<< m1_RcIter -> second << "." << endl;
// The element at a specific location in the multimap can be
// found using a dereferenced iterator addressing the location
m1_AcIter = m1.end( );
m1_AcIter--;
m1_RcIter = m1.lower_bound( m1_AcIter -> first );
cout << "The first element of m1 with a key matching\n"
<< "that of the last element is: "
<< m1_RcIter -> second << "." << endl;
// Note that the first element with a key equal to
// the key of the last element is not the last element
if ( m1_RcIter == --m1.end( ) )
cout << "This is the last element of multimap m1."
<< endl;
else
cout << "This is not the last element of multimap m1."
<< endl;
}
The element of multimap m1 with a key of 2 is: 20.
The first element of multimap m1 with a key of 3 is: 20.
The multimap m1 doesn't have an element with a key of 4.
The first element of m1 with a key matching
that of the last element is: 20.
This is not the last element of multimap m1.
multimap::mapped_type
En typ som representerar datatypen som lagras i en multimap.
typedef Type mapped_type;
Anmärkningar
mapped_type är synonymt med mallparametern Type.
Mer information om Typefinns i multimap avsnittet Klass .
Exempel
Se exemplet för value_type ett exempel på hur du deklarerar och använder key_type.
multimap::max_size
Returnerar den maximala längden på multimap.
size_type max_size() const;
Returvärde
Den maximala möjliga längden på multimap.
Exempel
// multimap_max_size.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
multimap <int, int> m1;
multimap <int, int> :: size_type i;
i = m1.max_size( );
cout << "The maximum possible length "
<< "of the multimap is " << i << "." << endl;
}
multimap::multimap
Konstruerar en multimap som är tom eller som är en kopia av hela eller en del av någon annan multimap.
multimap();
explicit multimap(
const Traits& Comp);
multimap(
const Traits& Comp,
const Allocator& Al);
map(
const multimap& Right);
multimap(
multimap&& Right);
multimap(
initializer_list<value_type> IList);
multimap(
initializer_list<value_type> IList,
const Compare& Comp);
multimap(
initializer_list<value_type> IList,
const Compare& Comp,
const Allocator& Al);
template <class InputIterator>
multimap(
InputIterator First,
InputIterator Last);
template <class InputIterator>
multimap(
InputIterator First,
InputIterator Last,
const Traits& Comp);
template <class InputIterator>
multimap(
InputIterator First,
InputIterator Last,
const Traits& Comp,
const Allocator& Al);
Parameterar
Al
Den lagringsallokeringsklass som ska användas för det här multimap-objektet, som standard är Allokerare.
Comp
Jämförelsefunktionen av typen constTraits som används för att sortera elementen på kartan, som standard är Traits.
Right
Kartan som den konstruerade uppsättningen ska vara en kopia av.
First
Positionen för det första elementet i området med element som ska kopieras.
Last
Positionen för det första elementet utöver det område av element som ska kopieras.
IList
Den initializer_list som elementen ska kopieras från.
Anmärkningar
Alla konstruktorer lagrar en typ av allokeringsobjekt som hanterar minneslagring för multimap och som senare kan returneras genom att anropa get_allocator. Allokeringsparametern utelämnas ofta i klassdeklarationerna och förbearbetar makron som används för att ersätta alternativa allokerare.
Alla konstruktorer initierar sina multimap.
Alla konstruktorer lagrar ett funktionsobjekt av typen Traits som används för att upprätta en ordning bland nycklarna i multimap och som senare kan returneras genom att anropa key_comp.
De första tre konstruktorerna anger en tom initial multimap, den andra anger vilken typ av jämförelsefunktion (Comp) som ska användas för att fastställa ordningen på elementen och den tredje anger uttryckligen den allokeringstyp (Al) som ska användas.
explicit Nyckelordet undertrycker vissa typer av automatisk typkonvertering.
Den fjärde konstruktorn anger en kopia av multimapRight.
Den femte konstruktorn anger en kopia av genom att multimap flytta höger.
Konstruktorerna 6, 7 och 8 kopierar medlemmarna i en initializer_list.
De kommande tre konstruktorerna kopierar intervallet [First, Last) för en karta med ökad explicititet i att ange typen av jämförelsefunktion för klass Traits och allokering.
Exempel
// multimap_ctor.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main()
{
using namespace std;
typedef pair <int, int> Int_Pair;
// Create an empty multimap m0 of key type integer
multimap <int, int> m0;
// Create an empty multimap m1 with the key comparison
// function of less than, then insert 4 elements
multimap <int, int, less<int> > m1;
m1.insert(Int_Pair(1, 10));
m1.insert(Int_Pair(2, 20));
m1.insert(Int_Pair(3, 30));
m1.insert(Int_Pair(4, 40));
// Create an empty multimap m2 with the key comparison
// function of greater than, then insert 2 elements
multimap <int, int, less<int> > m2;
m2.insert(Int_Pair(1, 10));
m2.insert(Int_Pair(2, 20));
// Create a multimap m3 with the
// allocator of multimap m1
multimap <int, int>::allocator_type m1_Alloc;
m1_Alloc = m1.get_allocator();
multimap <int, int> m3(less<int>(), m1_Alloc);
m3.insert(Int_Pair(3, 30));
// Create a copy, multimap m4, of multimap m1
multimap <int, int> m4(m1);
// Create a multimap m5 by copying the range m1[ first, last)
multimap <int, int>::const_iterator m1_bcIter, m1_ecIter;
m1_bcIter = m1.begin();
m1_ecIter = m1.begin();
m1_ecIter++;
m1_ecIter++;
multimap <int, int> m5(m1_bcIter, m1_ecIter);
// Create a multimap m6 by copying the range m4[ first, last)
// and with the allocator of multimap m2
multimap <int, int>::allocator_type m2_Alloc;
m2_Alloc = m2.get_allocator();
multimap <int, int> m6(m4.begin(), ++m4.begin(), less<int>(), m2_Alloc);
cout << "m1 =";
for (auto i : m1)
cout << i.first << " " << i.second << ", ";
cout << endl;
cout << "m2 =";
for (auto i : m2)
cout << i.first << " " << i.second << ", ";
cout << endl;
cout << "m3 =";
for (auto i : m3)
cout << i.first << " " << i.second << ", ";
cout << endl;
cout << "m4 =";
for (auto i : m4)
cout << i.first << " " << i.second << ", ";
cout << endl;
cout << "m5 =";
for (auto i : m5)
cout << i.first << " " << i.second << ", ";
cout << endl;
cout << "m6 =";
for (auto i : m6)
cout << i.first << " " << i.second << ", ";
cout << endl;
// Create a multimap m8 by copying in an initializer_list
multimap<int, int> m8{ { { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 } } };
cout << "m8: = ";
for (auto i : m8)
cout << i.first << " " << i.second << ", ";
cout << endl;
// Create a multimap m9 with an initializer_list and a comparator
multimap<int, int> m9({ { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 } }, less<int>());
cout << "m9: = ";
for (auto i : m9)
cout << i.first << " " << i.second << ", ";
cout << endl;
// Create a multimap m10 with an initializer_list, a comparator, and an allocator
multimap<int, int> m10({ { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 } }, less<int>(), m9.get_allocator());
cout << "m10: = ";
for (auto i : m10)
cout << i.first << " " << i.second << ", ";
cout << endl;
}
multimap::operator=
Ersätter elementen i en multimap med en kopia av en annan multimap.
multimap& operator=(const multimap& right);
multimap& operator=(multimap&& right);
Parameterar
right
Den multimap som kopieras till multimap.
Anmärkningar
När du har raderat befintliga element i en multimapoperator= antingen kopierar eller flyttar innehållet i right till multimap.
Exempel
// multimap_operator_as.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
multimap<int, int> v1, v2, v3;
multimap<int, int>::iterator iter;
v1.insert(pair<int, int>(1, 10));
cout << "v1 = " ;
for (iter = v1.begin(); iter != v1.end(); iter++)
cout << iter->second << " ";
cout << endl;
v2 = v1;
cout << "v2 = ";
for (iter = v2.begin(); iter != v2.end(); iter++)
cout << iter->second << " ";
cout << endl;
// move v1 into v2
v2.clear();
v2 = move(v1);
cout << "v2 = ";
for (iter = v2.begin(); iter != v2.end(); iter++)
cout << iter->second << " ";
cout << endl;
}
multimap::pointer
En typ som ger en pekare till ett element i en multimap.
typedef typename allocator_type::pointer pointer;
Anmärkningar
En typ pointer kan användas för att ändra värdet för ett element.
I de flesta fall bör en iterator användas för att komma åt elementen i ett multimap objekt.
multimap::rbegin
Returnerar en iterator som adresserar det första elementet i en omvänd multimap.
const_reverse_iterator rbegin() const;
reverse_iterator rbegin();
Returvärde
En omvänd dubbelriktad iterator som adresserar det första elementet i en omvänd multimap eller adresserar vad som hade varit det sista elementet i det oreverserade multimap.
Anmärkningar
rbegin används med omvända multimap precis som begin används med en multimap.
Om returvärdet rbegin för har tilldelats till en const_reverse_iteratormultimap kan objektet inte ändras. Om returvärdet rbegin för har tilldelats till en reverse_iteratormultimap kan objektet ändras.
rbegin kan användas för att iterera genom en multimap bakåt.
Exempel
// multimap_rbegin.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
multimap <int, int> m1;
multimap <int, int> :: iterator m1_Iter;
multimap <int, int> :: reverse_iterator m1_rIter;
multimap <int, int> :: const_reverse_iterator m1_crIter;
typedef pair <int, int> Int_Pair;
m1.insert ( Int_Pair ( 1, 10 ) );
m1.insert ( Int_Pair ( 2, 20 ) );
m1.insert ( Int_Pair ( 3, 30 ) );
m1_rIter = m1.rbegin( );
cout << "The first element of the reversed multimap m1 is "
<< m1_rIter -> first << "." << endl;
// begin can be used to start an iteration
// through a multimap in a forward order
cout << "The multimap is: ";
for ( m1_Iter = m1.begin( ) ; m1_Iter != m1.end( ); m1_Iter++)
cout << m1_Iter -> first << " ";
cout << "." << endl;
// rbegin can be used to start an iteration
// through a multimap in a reverse order
cout << "The reversed multimap is: ";
for ( m1_rIter = m1.rbegin( ) ; m1_rIter != m1.rend( ); m1_rIter++)
cout << m1_rIter -> first << " ";
cout << "." << endl;
// A multimap element can be erased by dereferencing its key
m1_rIter = m1.rbegin( );
m1.erase ( m1_rIter -> first );
m1_rIter = m1.rbegin( );
cout << "After the erasure, the first element "
<< "in the reversed multimap is "
<< m1_rIter -> first << "." << endl;
}
The first element of the reversed multimap m1 is 3.
The multimap is: 1 2 3 .
The reversed multimap is: 3 2 1 .
After the erasure, the first element in the reversed multimap is 2.
multimap::reference
En typ som innehåller en referens till ett element som lagras i en multimap.
typedef typename allocator_type::reference reference;
Exempel
// multimap_ref.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
multimap <int, int> m1;
typedef pair <int, int> Int_Pair;
m1.insert ( Int_Pair ( 1, 10 ) );
m1.insert ( Int_Pair ( 2, 20 ) );
// Declare and initialize a const_reference &Ref1
// to the key of the first element
const int &Ref1 = ( m1.begin( ) -> first );
// The following line would cause an error because the
// non-const_reference can't be used to access the key
// int &Ref1 = ( m1.begin( ) -> first );
cout << "The key of first element in the multimap is "
<< Ref1 << "." << endl;
// Declare and initialize a reference &Ref2
// to the data value of the first element
int &Ref2 = ( m1.begin( ) -> second );
cout << "The data value of first element in the multimap is "
<< Ref2 << "." << endl;
// The non-const_reference can be used to modify the
// data value of the first element
Ref2 = Ref2 + 5;
cout << "The modified data value of first element is "
<< Ref2 << "." << endl;
}
The key of first element in the multimap is 1.
The data value of first element in the multimap is 10.
The modified data value of first element is 15.
multimap::rend
Returnerar en iterator som adresserar platsen som lyckades det sista elementet i en omvänd multimap.
const_reverse_iterator rend() const;
reverse_iterator rend();
Returvärde
En omvänd dubbelriktad iterator som adresserar platsen som lyckades med det sista elementet i en omvänd multimap (platsen som hade föregått det första elementet i det oreverserade multimap).
Anmärkningar
rend används med omvända multimap precis som end används med en multimap.
Om returvärdet rend för har tilldelats till en const_reverse_iteratormultimap kan objektet inte ändras. Om returvärdet rend för har tilldelats till en reverse_iteratormultimap kan objektet ändras.
rend kan användas för att testa om en omvänd iterator har nått slutet av sin multimap.
Värdet som returneras av rend ska inte derefereras.
Exempel
// multimap_rend.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
multimap <int, int> m1;
multimap <int, int> :: iterator m1_Iter;
multimap <int, int> :: reverse_iterator m1_rIter;
multimap <int, int> :: const_reverse_iterator m1_crIter;
typedef pair <int, int> Int_Pair;
m1.insert ( Int_Pair ( 1, 10 ) );
m1.insert ( Int_Pair ( 2, 20 ) );
m1.insert ( Int_Pair ( 3, 30 ) );
m1_rIter = m1.rend( );
m1_rIter--;
cout << "The last element of the reversed multimap m1 is "
<< m1_rIter -> first << "." << endl;
// begin can be used to start an iteration
// through a multimap in a forward order
cout << "The multimap is: ";
for ( m1_Iter = m1.begin( ) ; m1_Iter != m1.end( ); m1_Iter++)
cout << m1_Iter -> first << " ";
cout << "." << endl;
// rbegin can be used to start an iteration
// through a multimap in a reverse order
cout << "The reversed multimap is: ";
for ( m1_rIter = m1.rbegin( ) ; m1_rIter != m1.rend( ); m1_rIter++)
cout << m1_rIter -> first << " ";
cout << "." << endl;
// A multimap element can be erased by dereferencing to its key
m1_rIter = --m1.rend( );
m1.erase ( m1_rIter -> first );
m1_rIter = m1.rend( );
m1_rIter--;
cout << "After the erasure, the last element "
<< "in the reversed multimap is "
<< m1_rIter -> first << "." << endl;
}
The last element of the reversed multimap m1 is 1.
The multimap is: 1 2 3 .
The reversed multimap is: 3 2 1 .
After the erasure, the last element in the reversed multimap is 2.
multimap::reverse_iterator
En typ som tillhandahåller en dubbelriktad iterator som kan läsa eller ändra ett element i en omvänd multimap.
typedef std::reverse_iterator<iterator> reverse_iterator;
Anmärkningar
En typ reverse_iterator används för att iterera genom det multimap omvända.
Definieras reverse_iterator av multimap punkter till objekt av value_type, som är av typen pair<const Key, Type>. Värdet för nyckeln är tillgängligt via det första medlemsparet och värdet för det mappade elementet är tillgängligt via den andra medlemmen i paret.
Om du vill avreferering av en reverse_iteratorrIter pekar på ett element i en multimapanvänder du operatorn -> .
Om du vill komma åt värdet för -nyckeln för elementet använder du rIter->first, vilket motsvarar (*rIter).first. Om du vill komma åt värdet för det mappade datumet för elementet använder du rIter->second, vilket motsvarar (*rIter).second.
Exempel
Se exemplet för rbegin ett exempel på hur du deklarerar och använder reverse_iterator.
multimap::size
Returnerar antalet element i multimap.
size_type size() const;
Returvärde
Den aktuella längden på multimap.
Exempel
I följande exempel visas användningen av multimap::size medlemsfunktionen.
// multimap_size.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main()
{
using namespace std;
multimap<int, int> m1, m2;
multimap<int, int>::size_type i;
typedef pair<int, int> Int_Pair;
m1.insert(Int_Pair(1, 1));
i = m1.size();
cout << "The multimap length is " << i << "." << endl;
m1.insert(Int_Pair(2, 4));
i = m1.size();
cout << "The multimap length is now " << i << "." << endl;
}
The multimap length is 1.
The multimap length is now 2.
multimap::size_type
En osignerad heltalstyp som räknar antalet element i en multimap.
typedef typename allocator_type::size_type size_type;
Exempel
Se exemplet för size ett exempel på hur du deklarerar och använder size_type
multimap::swap
Utbyter elementen i två multimaps.
void swap(
multimap<Key, Type, Traits, Allocator>& right);
Parameterar
right
Den multimap som tillhandahåller de element som ska bytas ut, eller multimap vars element ska bytas ut mot elementen i multimapleft.
Anmärkningar
Medlemsfunktionen ogiltigförklarar inga referenser, pekare eller iteratorer som anger element i de två multimapvars element utbyts.
Exempel
// multimap_swap.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
multimap <int, int> m1, m2, m3;
multimap <int, int>::iterator m1_Iter;
typedef pair <int, int> Int_Pair;
m1.insert ( Int_Pair ( 1, 10 ) );
m1.insert ( Int_Pair ( 2, 20 ) );
m1.insert ( Int_Pair ( 3, 30 ) );
m2.insert ( Int_Pair ( 10, 100 ) );
m2.insert ( Int_Pair ( 20, 200 ) );
m3.insert ( Int_Pair ( 30, 300 ) );
cout << "The original multimap m1 is:";
for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ )
cout << " " << m1_Iter -> second;
cout << "." << endl;
// This is the member function version of swap
m1.swap( m2 );
cout << "After swapping with m2, multimap m1 is:";
for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ )
cout << " " << m1_Iter -> second;
cout << "." << endl;
// This is the specialized template version of swap
swap( m1, m3 );
cout << "After swapping with m3, multimap m1 is:";
for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ )
cout << " " << m1_Iter -> second;
cout << "." << endl;
}
The original multimap m1 is: 10 20 30.
After swapping with m2, multimap m1 is: 100 200.
After swapping with m3, multimap m1 is: 300.
multimap::upper_bound
Returnerar ett iterator till det första elementet i ett multimap som med en nyckel som är större än en angiven nyckel.
iterator upper_bound(const Key& key);
const_iterator upper_bound(const Key& key) const;
Parameterar
key
Argumentnyckeln som ska jämföras med sorteringsnyckeln för ett element från den multimap som genomsöks.
Returvärde
En iterator eller const_iterator som adresserar platsen för ett element i ett multimap som med en nyckel som är större än argumentnyckeln, eller som adresserar platsen som lyckas med det sista elementet i multimap om ingen matchning hittas för nyckeln.
Om returvärdet har tilldelats till ett const_iteratormultimap kan objektet inte ändras. Om returvärdet har tilldelats till en iteratormultimap kan objektet ändras.
Exempel
// multimap_upper_bound.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
multimap <int, int> m1;
multimap <int, int> :: const_iterator m1_AcIter, m1_RcIter;
typedef pair <int, int> Int_Pair;
m1.insert ( Int_Pair ( 1, 10 ) );
m1.insert ( Int_Pair ( 2, 20 ) );
m1.insert ( Int_Pair ( 3, 30 ) );
m1.insert ( Int_Pair ( 3, 40 ) );
m1_RcIter = m1.upper_bound( 1 );
cout << "The 1st element of multimap m1 with "
<< "a key greater than 1 is: "
<< m1_RcIter -> second << "." << endl;
m1_RcIter = m1.upper_bound( 2 );
cout << "The first element of multimap m1 with a key "
<< " greater than 2 is: "
<< m1_RcIter -> second << "." << endl;
// If no match is found for the key, end( ) is returned
m1_RcIter = m1.lower_bound( 4 );
if ( m1_RcIter == m1.end( ) )
cout << "The multimap m1 doesn't have an element "
<< "with a key of 4." << endl;
else
cout << "The element of multimap m1 with a key of 4 is: "
<< m1_RcIter -> second << "." << endl;
// The element at a specific location in the multimap can be
// found using a dereferenced iterator addressing the location
m1_AcIter = m1.begin( );
m1_RcIter = m1.upper_bound( m1_AcIter -> first );
cout << "The first element of m1 with a key greater than\n"
<< "that of the initial element of m1 is: "
<< m1_RcIter -> second << "." << endl;
}
The 1st element of multimap m1 with a key greater than 1 is: 20.
The first element of multimap m1 with a key greater than 2 is: 30.
The multimap m1 doesn't have an element with a key of 4.
The first element of m1 with a key greater than
that of the initial element of m1 is: 20.
multimap::value_comp
Medlemsfunktionen returnerar ett funktionsobjekt som avgör ordningen på element i en multimap genom att jämföra deras nyckelvärden.
value_compare value_comp() const;
Returvärde
Returnerar jämförelsefunktionsobjektet som används multimap för att sortera dess element.
Anmärkningar
För ett multimapm, om två element e1(k1, d1) och e2(k2, d2) är objekt av typen value_type, där k1 och k2 är deras nycklar av typen key_type och d1 och d2 är deras data av typen mapped_type, motsvarar m.value_comp(e1, e2)detta m.key_comp(k1, k2) .
Exempel
// multimap_value_comp.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
multimap <int, int, less<int> > m1;
multimap <int, int, less<int> >::value_compare vc1 = m1.value_comp( );
multimap<int,int>::iterator Iter1, Iter2;
Iter1= m1.insert ( multimap <int, int> :: value_type ( 1, 10 ) );
Iter2= m1.insert ( multimap <int, int> :: value_type ( 2, 5 ) );
if( vc1( *Iter1, *Iter2 ) == true )
{
cout << "The element ( 1,10 ) precedes the element ( 2,5 )."
<< endl;
}
else
{
cout << "The element ( 1,10 ) does "
<< "not precede the element ( 2,5 )."
<< endl;
}
if( vc1( *Iter2, *Iter1 ) == true )
{
cout << "The element ( 2,5 ) precedes the element ( 1,10 )."
<< endl;
}
else
{
cout << "The element ( 2,5 ) does "
<< "not precede the element ( 1,10 )."
<< endl;
}
}
The element ( 1,10 ) precedes the element ( 2,5 ).
The element ( 2,5 ) does not precede the element ( 1,10 ).
multimap::value_type
En typ som representerar den typ av objekt som lagras som ett element på en karta.
typedef pair<const Key, Type> value_type;
Exempel
// multimap_value_type.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
typedef pair <const int, int> cInt2Int;
multimap <int, int> m1;
multimap <int, int> :: key_type key1;
multimap <int, int> :: mapped_type mapped1;
multimap <int, int> :: value_type value1;
multimap <int, int> :: iterator pIter;
// value_type can be used to pass the correct type
// explicitly to avoid implicit type conversion
m1.insert ( multimap <int, int> :: value_type ( 1, 10 ) );
// Compare another way to insert objects into a hash_multimap
m1.insert ( cInt2Int ( 2, 20 ) );
// Initializing key1 and mapped1
key1 = ( m1.begin( ) -> first );
mapped1 = ( m1.begin( ) -> second );
cout << "The key of first element in the multimap is "
<< key1 << "." << endl;
cout << "The data value of first element in the multimap is "
<< mapped1 << "." << endl;
// The following line would cause an error because
// the value_type is not assignable
// value1 = cInt2Int ( 4, 40 );
cout << "The keys of the mapped elements are:";
for ( pIter = m1.begin( ) ; pIter != m1.end( ) ; pIter++ )
cout << " " << pIter -> first;
cout << "." << endl;
cout << "The values of the mapped elements are:";
for ( pIter = m1.begin( ) ; pIter != m1.end( ) ; pIter++ )
cout << " " << pIter -> second;
cout << "." << endl;
}
The key of first element in the multimap is 1.
The data value of first element in the multimap is 10.
The keys of the mapped elements are: 1 2.
The values of the mapped elements are: 10 20.
Se även
Behållare
Trådsäkerhet i C++ Standard Library
Standardbiblioteksreferens för C++