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.
Flermängdsklassen C++ Standardbibliotek används för lagring och hämtning av data från en samling där värdena för de element som ingår inte behöver vara unika och där de fungerar som nyckelvärden enligt vilka data sorteras automatiskt. Nyckelvärdet för ett element i ett multiset kanske inte ändras direkt. I stället måste gamla värden tas bort och element med nya värden infogade.
Syntax
template <class Key, class Compare =less <Key>, class Allocator =allocator <Key>>
class multiset
Parameterar
Key
Den elementdatatyp som ska lagras i multiset.
Compare
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 multiset. Det binära predikatet mindre<Nyckel> ä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 multisetallokering och frigör minne. Standardvärdet är allocator<Key>.
Anmärkningar
Klassen C++ Standard Library multiset är:
En associativ container, som är 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 i den meningen att dess element inte behöver ha unika nycklar, så att ett nyckelvärde kan ha många elementvärden associerade med det.
En enkel associativ container eftersom dess elementvärden är dess nyckelvärden.
En klassmall eftersom funktionerna som den tillhandahåller är generiska och därför oberoende av den specifika typen av data som ingår som element. Den datatyp som ska användas anges i stället som en parameter i klassmallen tillsammans med jämförelsefunktionen och allokeraren.
Iteratorn som tillhandahålls av multiset klassen är en dubbelriktad iterator, men klassmedlemsfunktionerna insert och multiset har versioner som tar som mallparametrar en svagare indata-iterator, vars funktionskrav är mer minimala än de som garanteras av klassen med 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 gö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.
multiset Ska vara den associativa container som ska väljas när villkoren som associerar värdena med deras nycklar är uppfyllda av programmet. Elementen i en multiset kan vara flera och fungera som egna sorteringsnycklar, så nycklar är inte unika. En modell för den här typen av struktur är en ordnad lista över till exempel ord där orden kan förekomma mer än en gång. Om flera förekomster av orden inte hade tillåtits skulle en uppsättning ha varit lämplig containerstruktur. Om unika definitioner kopplades som värden till listan med unika nyckelord skulle en karta vara en lämplig struktur för att innehålla dessa data. Om definitionerna i stället inte var unika skulle en multimap vara den container som du väljer.
Orderordningen multiset den sekvens som den styr genom att anropa ett lagrat funktionsobjekt av typen 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å element, 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 och ett returvärde för true eller false. En ordning på en uppsättning är en strikt svag ordning om det binära predikatet är irreflexivt, antisymmetriskt och transitivt och om ekvivalensen är transitiv, där två objekt x och y definieras som likvärdiga när både f(x,y) och f(y,x) är falska. 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 .
Konstruktörer
| Konstruktor | Beskrivning |
|---|---|
| flera uppsättningar | Konstruerar en multiset som är tom eller som är en kopia av hela eller en del av en angiven multiset. |
Typedefs
| Typnamn | Beskrivning |
|---|---|
allocator_type |
En typedef för allocator -klassen för multiset objektet. |
const_iterator |
En typedef för en dubbelriktad iterator som kan läsa ett const element i multiset. |
const_pointer |
En typedef för en pekare till ett const element i en multiset. |
const_reference |
En typedef för en referens till ett const element som lagras i en multiset för att läsa och utföra const åtgärder. |
const_reverse_iterator |
En typedef för en dubbelriktad iterator som kan läsa alla const element i multiset. |
difference_type |
En signerad heltalstypdef för antalet element i ett multiset i ett intervall mellan element som iteratorer pekar på. |
iterator |
En typedef för en dubbelriktad iterator som kan läsa eller ändra alla element i en multiset. |
key_compare |
En typedef för ett funktionsobjekt som kan jämföra två nycklar för att fastställa den relativa ordningen för två element i multiset. |
key_type |
En typedef för ett funktionsobjekt som kan jämföra två sorteringsnycklar för att fastställa den relativa ordningen för två element i multiset. |
pointer |
En typedef för en pekare till ett element i en multiset. |
reference |
En typedef för en referens till ett element som lagras i en multiset. |
reverse_iterator |
En typedef för en dubbelriktad iterator som kan läsa eller ändra ett element i en omvänd multiset. |
size_type |
En osignerad heltalstyp som kan representera antalet element i en multiset. |
value_compare |
Typedef för ett funktionsobjekt som kan jämföra två element som sorteringsnycklar för att fastställa deras relativa ordning i multiset. |
value_type |
En typedef som beskriver ett objekt som lagras som ett element som ett multiset i sin kapacitet som ett värde. |
Medlemsfunktioner
| Medlemsfunktion | Beskrivning |
|---|---|
begin |
Returnerar en iterator som pekar på det första elementet i multiset. |
cbegin |
Returnerar en const iterator som adresserar det första elementet i multiset. |
cend |
Returnerar en const-iterator som adresserar platsen som lyckades med det sista elementet i en multiset. |
clear |
Raderar alla element i en multiset. |
contains
C++20 |
Kontrollera om det finns ett element med den angivna nyckeln i multiset. |
count |
Returnerar antalet element i en multiset vars nyckel matchar nyckeln som anges som en parameter. |
crbegin |
Returnerar en const iterator som adresserar det första elementet i en omvänd multiset. |
crend |
Returnerar en const-iterator som adresserar platsen som lyckades med det sista elementet i en omvänd multiset. |
emplace |
Infogar ett element som konstruerats på plats i en multiset. |
emplace_hint |
Infogar ett element som konstruerats på plats i en multiset, med ett placeringstips. |
empty |
Testar om en multiset är tom. |
end |
Returnerar en iterator som pekar på platsen efter det sista elementet i en multiset. |
equal_range |
Returnerar ett par iteratorer. Den första iteratorn i paret pekar på det första elementet i en multiset med en nyckel som är större än en angiven nyckel. Den andra iteratorn i paret pekar på det första elementet i multiset med en nyckel som är lika med eller större än nyckeln. |
erase |
Tar bort ett element eller ett område med element i en multiset från angivna positioner eller tar bort element som matchar en angiven nyckel. |
find |
Returnerar en iterator som pekar på den första platsen för ett element i en multiset som har en nyckel som är lika med en angiven nyckel. |
get_allocator |
Returnerar en kopia av det allocator objekt som används för att konstruera multiset. |
insert |
Infogar ett element eller ett område med element i en multiset. |
key_comp |
Innehåller ett funktionsobjekt som kan jämföra två sorteringsnycklar för att fastställa den relativa ordningen för två element i multiset. |
lower_bound |
Returnerar en iterator till det första elementet i en multiset med en nyckel som är lika med eller större än en angiven nyckel. |
max_size |
Returnerar den maximala längden på multiset. |
rbegin |
Returnerar en iterator som pekar på det första elementet i en omvänd multiset. |
rend |
Returnerar en iterator som pekar på platsen som lyckades med det sista elementet i en omvänd multiset. |
size |
Returnerar antalet element i en multiset. |
swap |
Utbyter elementen i två multisets. |
upper_bound |
Returnerar en iterator till det första elementet i en multiset med en nyckel som är större än en angiven nyckel. |
value_comp |
Hämtar en kopia av jämförelseobjektet som används för att sortera elementvärden i en multiset. |
Operatörer
| Operatör | Beskrivning |
|---|---|
operator= |
Ersätter elementen i en multiset med en kopia av en annan multiset. |
Kravspecifikation
rubrik:<set>
Namespace:std
multiset::allocator_type
En typ som representerar allokeringsklassen multiset för objektet
typedef Allocator allocator_type;
Anmärkningar
allocator_type är synonymt med mallparametern Allocator.
Mer information om Allocatorfinns i avsnittet Anmärkningar i ämnet klass för flera uppsättningar .
Exempel
Se exemplet för get_allocator ett exempel med hjälp av allocator_type
multiset::begin
Returnerar en iterator som adresserar det första elementet i multiset.
const_iterator begin() const;
iterator begin();
Returvärde
En dubbelriktad iterator som adresserar det första elementet på multiset eller platsen som lyckas med en tom multiuppsättning.
Exempel
// multiset_begin.cpp
// compile with: /EHsc
#include <set>
#include <iostream>
int main( )
{
using namespace std;
multiset <int> ms1;
multiset <int>::iterator ms1_Iter;
multiset <int>::const_iterator ms1_cIter;
ms1.insert( 1 );
ms1.insert( 2 );
ms1.insert( 3 );
ms1_Iter = ms1.begin( );
cout << "The first element of ms1 is " << *ms1_Iter << endl;
ms1_Iter = ms1.begin( );
ms1.erase( ms1_Iter );
// The following 2 lines would err as the iterator is const
// ms1_cIter = ms1.begin( );
// ms1.erase( ms1_cIter );
ms1_cIter = ms1.begin( );
cout << "The first element of ms1 is now " << *ms1_cIter << endl;
}
The first element of ms1 is 1
The first element of ms1 is now 2
multiset::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 autotypsavdrag , 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
multiset::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 autotypsavdrag , 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.
multiset::clear
Raderar alla element i en multiset.
void clear();
Exempel
// multiset_clear.cpp
// compile with: /EHsc
#include <set>
#include <iostream>
int main( )
{
using namespace std;
multiset <int> ms1;
ms1.insert( 1 );
ms1.insert( 2 );
cout << "The size of the multiset is initially "
<< ms1.size( ) << "." << endl;
ms1.clear( );
cout << "The size of the multiset after clearing is "
<< ms1.size( ) << "." << endl;
}
The size of the multiset is initially 2.
The size of the multiset after clearing is 0.
multiset::const_iterator
En typ som tillhandahåller en dubbelriktad iterator som kan läsa ett const element i multiset.
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.
Exempel
Se exemplet för begin ett exempel med .const_iterator
multiset::const_pointer
En typ som ger en pekare till ett const element i en multiset.
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 multiset objekt.
multiset::const_reference
En typ som ger en referens till ett const element som lagras i en multiset för att läsa och utföra const åtgärder.
typedef typename allocator_type::const_reference const_reference;
Exempel
// multiset_const_ref.cpp
// compile with: /EHsc
#include <set>
#include <iostream>
int main( )
{
using namespace std;
multiset <int> ms1;
ms1.insert( 10 );
ms1.insert( 20 );
// Declare and initialize a const_reference &Ref1
// to the 1st element
const int &Ref1 = *ms1.begin( );
cout << "The first element in the multiset is "
<< Ref1 << "." << endl;
// The following line would cause an error because the
// const_reference can't be used to modify the multiset
// Ref1 = Ref1 + 5;
}
The first element in the multiset is 10.
multiset::const_reverse_iterator
En typ som tillhandahåller en dubbelriktad iterator som kan läsa alla const element i multiset.
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 multiset i omvänd ordning.
Exempel
Se exemplet för rend ett exempel på hur du deklarerar och använder const_reverse_iterator.
multiset::contains
Kontrollera om det finns ett element med den angivna nyckeln i multiset.
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 kompileringsalternativet /std:c++20 eller senare.
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 <set>
#include <iostream>
int main()
{
std::multiset<int> theMultiSet = {1, 2};
std::cout << std::boolalpha; // so booleans show as 'true' or 'false'
std::cout << theMultiSet.contains(2) << '\n';
std::cout << theMultiSet.contains(3) << '\n';
return 0;
}
true
false
multiset::count
Returnerar antalet element i en multiset vars nyckel matchar en parameter angiven nyckel.
size_type count(const Key& key) const;
Parameterar
key
Nyckeln för de element som ska matchas från multiset.
Returvärde
Antalet element i vars multiset sorteringsnyckel matchar parameternyckeln.
Anmärkningar
Medlemsfunktionen returnerar antalet element x i intervallet
[ lower_bound(key), upper_bound(key) )
Exempel
I följande exempel visas hur funktionen ::count member används multiset.
// multiset_count.cpp
// compile with: /EHsc
#include <set>
#include <iostream>
int main()
{
using namespace std;
multiset<int> ms1;
multiset<int>::size_type i;
ms1.insert(1);
ms1.insert(1);
ms1.insert(2);
// Elements don't need to be unique in multiset,
// so duplicates are allowed and counted.
i = ms1.count(1);
cout << "The number of elements in ms1 with a sort key of 1 is: "
<< i << "." << endl;
i = ms1.count(2);
cout << "The number of elements in ms1 with a sort key of 2 is: "
<< i << "." << endl;
i = ms1.count(3);
cout << "The number of elements in ms1 with a sort key of 3 is: "
<< i << "." << endl;
}
The number of elements in ms1 with a sort key of 1 is: 2.
The number of elements in ms1 with a sort key of 2 is: 1.
The number of elements in ms1 with a sort key of 3 is: 0.
multiset::crbegin
Returnerar en const iterator som adresserar det första elementet i en omvänd multiuppsättning.
const_reverse_iterator crbegin() const;
Returvärde
En omvänd dubbelriktad iterator som hanterar det första elementet i en omvänd multimängd eller som behandlar vad som hade varit det sista elementet i den icke-omvända multimängden.
Anmärkningar
crbegin används med en omvänd multiuppsättning precis som start används med en multiset.
Med returvärdet för crbeginkan multiset-objektet inte ändras.
crbegin kan användas för att iterera genom en multiset bakåt.
Exempel
// multiset_crbegin.cpp
// compile with: /EHsc
#include <set>
#include <iostream>
int main( )
{
using namespace std;
multiset <int> ms1;
multiset <int>::const_reverse_iterator ms1_crIter;
ms1.insert( 10 );
ms1.insert( 20 );
ms1.insert( 30 );
ms1_crIter = ms1.crbegin( );
cout << "The first element in the reversed multiset is "
<< *ms1_crIter << "." << endl;
}
The first element in the reversed multiset is 30.
multiset::crend
Returnerar en const-iterator som adresserar platsen som lyckades med det sista elementet i en omvänd multiuppsättning.
const_reverse_iterator crend() const;
Returvärde
En omvänd dubbelriktad iterator som adresserar platsen som lyckas med det sista elementet i en omvänd multimängd (platsen som hade föregått det första elementet i den oriktade multimängden).
Anmärkningar
crend används med en omvänd multiuppsättning precis som end används med en multiset.
Med returvärdet för crendkan multiset-objektet inte ändras.
crend kan användas för att testa om en omvänd iterator har nått slutet av sin multiset.
Värdet som returneras av crend ska inte derefereras.
Exempel
// multiset_crend.cpp
// compile with: /EHsc
#include <set>
#include <iostream>
int main() {
using namespace std;
multiset <int> ms1;
multiset <int>::const_reverse_iterator ms1_crIter;
ms1.insert( 10 );
ms1.insert( 20 );
ms1.insert( 30 );
ms1_crIter = ms1.crend( ) ;
ms1_crIter--;
cout << "The last element in the reversed multiset is "
<< *ms1_crIter << "." << endl;
}
multiset::difference_type
En signerad heltalstyp som kan användas för att representera antalet element i ett multiset 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, som inkluderar klassen för 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 som vektor.
Exempel
// multiset_diff_type.cpp
// compile with: /EHsc
#include <iostream>
#include <set>
#include <algorithm>
int main( )
{
using namespace std;
multiset <int> ms1;
multiset <int>::iterator ms1_Iter, ms1_bIter, ms1_eIter;
ms1.insert( 20 );
ms1.insert( 10 );
ms1.insert( 20 );
ms1_bIter = ms1.begin( );
ms1_eIter = ms1.end( );
multiset <int>::difference_type df_typ5, df_typ10, df_typ20;
df_typ5 = count( ms1_bIter, ms1_eIter, 5 );
df_typ10 = count( ms1_bIter, ms1_eIter, 10 );
df_typ20 = count( ms1_bIter, ms1_eIter, 20 );
// The keys, and hence the elements, of a multiset aren't unique
cout << "The number '5' occurs " << df_typ5
<< " times in multiset ms1.\n";
cout << "The number '10' occurs " << df_typ10
<< " times in multiset ms1.\n";
cout << "The number '20' occurs " << df_typ20
<< " times in multiset ms1.\n";
// Count the number of elements in a multiset
multiset <int>::difference_type df_count = 0;
ms1_Iter = ms1.begin( );
while ( ms1_Iter != ms1_eIter)
{
df_count++;
ms1_Iter++;
}
cout << "The number of elements in the multiset ms1 is: "
<< df_count << "." << endl;
}
The number '5' occurs 0 times in multiset ms1.
The number '10' occurs 1 times in multiset ms1.
The number '20' occurs 2 times in multiset ms1.
The number of elements in the multiset ms1 is: 3.
multiset::emplace
Infogar ett element som är konstruerat på plats (inga kopierings- eller flyttåtgärder utförs) med ett placeringstips.
template <class... Args>
iterator emplace(Args&&... args);
Parameterar
args
Argumenten som vidarebefordras för att konstruera ett element som ska infogas i multiset.
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.
Exempel
// multiset_emplace.cpp
// compile with: /EHsc
#include <set>
#include <string>
#include <iostream>
using namespace std;
template <typename S> void print(const S& s) {
cout << s.size() << " elements: ";
for (const auto& p : s) {
cout << "(" << p << ") ";
}
cout << endl;
}
int main()
{
multiset<string> s1;
s1.emplace("Anna");
s1.emplace("Bob");
s1.emplace("Carmine");
cout << "multiset modified, now contains ";
print(s1);
cout << endl;
s1.emplace("Bob");
cout << "multiset modified, now contains ";
print(s1);
cout << endl;
}
multiset::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 multiset.
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.
Ett kodexempel finns i set::emplace_hint.
multiset::empty
Testar om en multiset är tom.
bool empty() const;
Returvärde
true om är multiset tom; false om är multiset nonempty.
Exempel
// multiset_empty.cpp
// compile with: /EHsc
#include <set>
#include <iostream>
int main()
{
using namespace std;
multiset <int> ms1, ms2;
ms1.insert ( 1 );
if ( ms1.empty( ) )
cout << "The multiset ms1 is empty." << endl;
else
cout << "The multiset ms1 is not empty." << endl;
if ( ms2.empty( ) )
cout << "The multiset ms2 is empty." << endl;
else
cout << "The multiset ms2 is not empty." << endl;
}
The multiset ms1 is not empty.
The multiset ms2 is empty.
multiset::end
Returnerar iteratorn past-the-end.
const_iterator end() const;
iterator end();
Returvärde
Iteratorn past-the-end. Om multiset är tom multiset::end() == multiset::begin().
Anmärkningar
end används för att testa om en iterator har passerat slutet av sin flermängd.
Värdet som returneras av end ska inte derefereras.
Ett kodexempel finns i multiset::find.
multiset::equal_range
Returnerar ett par iteratorer till det första elementet i ett multiset med en nyckel som är större än en angiven nyckel och till det första elementet i multiset med en nyckel som är lika med eller större än nyckeln.
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 multiset 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 du pr.
first, och om du vill avreferering av iteratorn med lägre gräns använder du *(pr. first). Om du vill komma åt den andra iteratorn för ett par pr som returneras av medlemsfunktionen använder du pr.
second, och om du vill avreferering av iteratorn med övre gräns använder du *(pr. second).
Exempel
// multiset_equal_range.cpp
// compile with: /EHsc
#include <set>
#include <iostream>
int main( )
{
using namespace std;
typedef multiset<int, less<int> > IntSet;
IntSet ms1;
multiset <int> :: const_iterator ms1_RcIter;
ms1.insert( 10 );
ms1.insert( 20 );
ms1.insert( 30 );
pair <IntSet::const_iterator, IntSet::const_iterator> p1, p2;
p1 = ms1.equal_range( 20 );
cout << "The upper bound of the element with "
<< "a key of 20 in the multiset ms1 is: "
<< *( p1.second ) << "." << endl;
cout << "The lower bound of the element with "
<< "a key of 20 in the multiset ms1 is: "
<< *( p1.first ) << "." << endl;
// Compare the upper_bound called directly
ms1_RcIter = ms1.upper_bound( 20 );
cout << "A direct call of upper_bound( 20 ) gives "
<< *ms1_RcIter << "," << endl
<< "matching the 2nd element of the pair"
<< " returned by equal_range( 20 )." << endl;
p2 = ms1.equal_range( 40 );
// If no match is found for the key,
// both elements of the pair return end( )
if ( ( p2.first == ms1.end( ) ) && ( p2.second == ms1.end( ) ) )
cout << "The multiset ms1 doesn't have an element "
<< "with a key less than 40." << endl;
else
cout << "The element of multiset ms1 with a key >= 40 is: "
<< *( p1.first ) << "." << endl;
}
The upper bound of the element with a key of 20 in the multiset ms1 is: 30.
The lower bound of the element with a key of 20 in the multiset ms1 is: 20.
A direct call of upper_bound( 20 ) gives 30,
matching the 2nd element of the pair returned by equal_range( 20 ).
The multiset ms1 doesn't have an element with a key less than 40.
multiset::erase
Tar bort ett element eller ett område med element i en multiset 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
Nyckelvärdet 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å multiset om det inte finns något sådant element.
För den tredje medlemsfunktionen returnerar antalet element som har tagits bort från multiset.
Anmärkningar
Ett kodexempel finns i set::erase.
multiset::find
Returnerar en iterator som refererar till platsen för ett element i en multiset 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 multiset 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 multiset(multiset::end()) om ingen matchning hittas för nyckeln.
Anmärkningar
Medlemsfunktionen returnerar en iterator som refererar till ett element i multiset vars nyckel motsvarar argumentet key under ett binärt predikat som inducerar en ordning baserat på en relation med mindre än jämförbarhet.
Om returvärdet för find har tilldelats till en const_iteratorkan multiset-objektet inte ändras. Om returvärdet find för har tilldelats till en iteratormultiset kan objektet ändras
Exempel
// compile with: /EHsc /W4 /MTd
#include <set>
#include <iostream>
#include <vector>
#include <string>
using namespace std;
template <typename T> void print_elem(const T& t) {
cout << "(" << t << ") ";
}
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()
{
multiset<int> s1({ 40, 45 });
cout << "The starting multiset s1 is: " << endl;
print_collection(s1);
vector<int> v;
v.push_back(43);
v.push_back(41);
v.push_back(46);
v.push_back(42);
v.push_back(44);
v.push_back(44); // attempt a duplicate
cout << "Inserting the following vector data into s1: " << endl;
print_collection(v);
s1.insert(v.begin(), v.end());
cout << "The modified multiset s1 is: " << endl;
print_collection(s1);
cout << endl;
findit(s1, 45);
findit(s1, 6);
}
multiset::get_allocator
Returnerar en kopia av allokeringsobjektet som används för att konstruera multiset.
allocator_type get_allocator() const;
Returvärde
Allokeraren som används av multiset.
Anmärkningar
Allokerare för klassen multiset 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
// multiset_get_allocator.cpp
// compile with: /EHsc
#include <set>
#include <iostream>
int main( )
{
using namespace std;
multiset <int>::allocator_type ms1_Alloc;
multiset <int>::allocator_type ms2_Alloc;
multiset <double>::allocator_type ms3_Alloc;
multiset <int>::allocator_type ms4_Alloc;
// The following lines declare objects
// that use the default allocator.
multiset <int> ms1;
multiset <int, allocator<int> > ms2;
multiset <double, allocator<double> > ms3;
cout << "The number of integers that can be allocated"
<< endl << "before free memory is exhausted: "
<< ms2.max_size( ) << "." << endl;
cout << "The number of doubles that can be allocated"
<< endl << "before free memory is exhausted: "
<< ms3.max_size( ) << "." << endl;
// The following lines create a multiset ms4
// with the allocator of multiset ms1
ms1_Alloc = ms1.get_allocator( );
multiset <int> ms4( less<int>( ), ms1_Alloc );
ms4_Alloc = ms4.get_allocator( );
// Two allocators are interchangeable if
// storage allocated from each can be
// deallocated with the other
if( ms1_Alloc == ms4_Alloc )
{
cout << "Allocators are interchangeable."
<< endl;
}
else
{
cout << "Allocators are not interchangeable."
<< endl;
}
}
multiset::insert
Infogar ett element eller ett område med element i en multiset.
// (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 multiset.
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 multiset kan användas för att konstruera ett element i value_typeoch 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.
1
Mallfunktionsargument som uppfyller kraven för en input_iterator_tag som pekar på element av en typ som kan användas för att konstruera 1 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 multiset.
Medlemsfunktionerna single-element-with-hint, (3) och (4), returnerar en iterator som pekar på positionen där det nya elementet infogades i multiset.
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.
För value_type en container är en typedef som tillhör containern och, för angivet, multiset<V>::value_type är typ const V.
Funktionen range member (5) infogar sekvensen med elementvärden i en multiset 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 s.insert(v.begin(), v.end()); alla element v i i s.
Medlemsfunktionen i initieringslistan (6) använder en initializer_list för att kopiera element till multiset.
För infogning av ett element som konstruerats på plats, dvs. inga kopierings- eller flyttåtgärder utförs, se multiset::emplace och multiset::emplace_hint.
Exempel
// multiset_insert.cpp
// compile with: /EHsc
#include <set>
#include <iostream>
#include <string>
#include <vector>
using namespace std;
template <typename S> void print(const S& s) {
cout << s.size() << " elements: ";
for (const auto& p : s) {
cout << "(" << p << ") ";
}
cout << endl;
}
int main()
{
// insert single values
multiset<int> s1;
// call insert(const value_type&) version
s1.insert({ 1, 10 });
// call insert(ValTy&&) version
s1.insert(20);
cout << "The original multiset values of s1 are:" << endl;
print(s1);
// intentionally attempt a duplicate, single element
s1.insert(1);
cout << "The modified multiset values of s1 are:" << endl;
print(s1);
cout << endl;
// single element, with hint
s1.insert(s1.end(), 30);
cout << "The modified multiset values of s1 are:" << endl;
print(s1);
cout << endl;
// The templatized version inserting a jumbled range
multiset<int> s2;
vector<int> v;
v.push_back(43);
v.push_back(294);
v.push_back(41);
v.push_back(330);
v.push_back(42);
v.push_back(45);
cout << "Inserting the following vector data into s2:" << endl;
print(v);
s2.insert(v.begin(), v.end());
cout << "The modified multiset values of s2 are:" << endl;
print(s2);
cout << endl;
// The templatized versions move-constructing elements
multiset<string> s3;
string str1("blue"), str2("green");
// single element
s3.insert(move(str1));
cout << "After the first move insertion, s3 contains:" << endl;
print(s3);
// single element with hint
s3.insert(s3.end(), move(str2));
cout << "After the second move insertion, s3 contains:" << endl;
print(s3);
cout << endl;
multiset<int> s4;
// Insert the elements from an initializer_list
s4.insert({ 4, 44, 2, 22, 3, 33, 1, 11, 5, 55 });
cout << "After initializer_list insertion, s4 contains:" << endl;
print(s4);
cout << endl;
}
multiset::iterator
En typ som ger en konstant dubbelriktad iterator som kan läsa alla element i en multiset.
typedef implementation-defined iterator;
Exempel
I exemplet för start finns ett exempel på hur du deklarerar och använder en iterator.
multiset::key_comp
Hämtar en kopia av jämförelseobjektet som används för att beställa nycklar i en multiset.
key_compare key_comp() const;
Returvärde
Returnerar det funktionsobjekt som används multiset för att ordna dess element, vilket är mallparametern Compare.
Mer information om Comparefinns i avsnittet Anmärkningar i ämnet klass för flera uppsättningar .
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.
Både key_compare och value_compare är synonymer för mallparametern Compare. Båda typerna tillhandahålls för klassuppsättningen och flera uppsättningar, där de är identiska, för kompatibilitet med klasskartan och multimappen, där de är distinkta.
Exempel
// multiset_key_comp.cpp
// compile with: /EHsc
#include <set>
#include <iostream>
int main( )
{
using namespace std;
multiset <int, less<int> > ms1;
multiset <int, less<int> >::key_compare kc1 = ms1.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 s1."
<< endl;
}
else
{
cout << "kc1( 2,3 ) returns value of false "
<< "where kc1 is the function object of ms1."
<< endl;
}
multiset <int, greater<int> > ms2;
multiset <int, greater<int> >::key_compare kc2 = ms2.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 ms2."
<< endl;
}
else
{
cout << "kc2( 2,3 ) returns value of false, "
<< "where kc2 is the function object of ms2."
<< endl;
}
}
kc1( 2,3 ) returns value of true, where kc1 is the function object of s1.
kc2( 2,3 ) returns value of false, where kc2 is the function object of ms2.
multiset::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 multiset.
typedef Compare key_compare;
Anmärkningar
key_compare är synonymt med mallparametern Compare.
Mer information om Comparefinns i avsnittet Kommentarer i multiset ämnet Klass .
Exempel
Se exemplet för key_comp ett exempel på hur du deklarerar och använder key_compare.
multiset::key_type
En typ som tillhandahåller ett funktionsobjekt som kan jämföra sorteringsnycklar för att fastställa den relativa ordningen för två element i multiset.
typedef Key key_type;
Anmärkningar
key_type är synonymt med mallparametern Key.
Mer information om Keyfinns i avsnittet Kommentarer i multiset ämnet Klass .
Exempel
Se exemplet för value_type ett exempel på hur du deklarerar och använder key_type.
multiset::lower_bound
Returnerar en iterator till det första elementet i en multiset med en nyckel som är lika med eller större än en angiven nyckel.
const_iterator lower_bound(const Key& key) const;
iterator lower_bound(const Key& key);
Parameterar
key
Argumentnyckeln som ska jämföras med sorteringsnyckeln för ett element från den multiset som genomsöks.
Returvärde
En iterator eller const_iterator som adresserar platsen för ett element i en multiset som med en nyckel som är lika med eller större än argumentnyckeln, eller som adresserar platsen som lyckas med det sista elementet i multiset om ingen matchning hittas för nyckeln.
Exempel
// multiset_lower_bound.cpp
// compile with: /EHsc
#include <set>
#include <iostream>
int main( )
{
using namespace std;
multiset <int> ms1;
multiset <int> :: const_iterator ms1_AcIter, ms1_RcIter;
ms1.insert( 10 );
ms1.insert( 20 );
ms1.insert( 30 );
ms1_RcIter = ms1.lower_bound( 20 );
cout << "The element of multiset ms1 with a key of 20 is: "
<< *ms1_RcIter << "." << endl;
ms1_RcIter = ms1.lower_bound( 40 );
// If no match is found for the key, end( ) is returned
if ( ms1_RcIter == ms1.end( ) )
cout << "The multiset ms1 doesn't have an element "
<< "with a key of 40." << endl;
else
cout << "The element of multiset ms1 with a key of 40 is: "
<< *ms1_RcIter << "." << endl;
// The element at a specific location in the multiset can be
// found using a dereferenced iterator addressing the location
ms1_AcIter = ms1.end( );
ms1_AcIter--;
ms1_RcIter = ms1.lower_bound( *ms1_AcIter );
cout << "The element of ms1 with a key matching "
<< "that of the last element is: "
<< *ms1_RcIter << "." << endl;
}
The element of multiset ms1 with a key of 20 is: 20.
The multiset ms1 doesn't have an element with a key of 40.
The element of ms1 with a key matching that of the last element is: 30.
multiset::max_size
Returnerar den maximala längden på multiset.
size_type max_size() const;
Returvärde
Den maximala möjliga längden på multiset.
Exempel
// multiset_max_size.cpp
// compile with: /EHsc
#include <set>
#include <iostream>
int main( )
{
using namespace std;
multiset <int> ms1;
multiset <int>::size_type i;
i = ms1.max_size( );
cout << "The maximum possible length "
<< "of the multiset is " << i << "." << endl;
}
multiset::multiset
Konstruerar en multiset som är tom eller som är en kopia av hela eller en del av någon annan multiset.
multiset();
explicit multiset (
const Compare& Comp);
multiset (
const Compare& Comp,
const Allocator& Al);
multiset(
const multiset& Right);
multiset(
multiset&& Right);
multiset(
initializer_list<Type> IList);
multiset(
initializer_list<Type> IList,
const Compare& Comp);
multiset(
initializer_list<Type> IList,
const Compare& Comp,
const Allocator& Al);
template <class InputIterator>
multiset (
InputIterator First,
InputIterator Last);
template <class InputIterator>
multiset (
InputIterator First,
InputIterator Last,
const Compare& Comp);
template <class InputIterator>
multiset (
InputIterator First,
InputIterator Last,
const Compare& Comp,
const Allocator& Al);
Parameterar
Al
Den lagringsallokeringsklass som ska användas för det här flermängdsobjektet, som standard är Allocator.
Comp
Jämförelsefunktionen av typen const Compare som används för att sortera elementen multiseti , som standard är Compare.
Right
som multiset den konstruerade multimängden 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 multiset 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 sin multiuppsättning.
Alla konstruktorer lagrar ett funktionsobjekt av typen Compare som används för att upprätta en ordning bland nycklarna för multiset och som senare kan returneras genom att anropa key_comp.
De första tre konstruktorerna anger en tom inledande multiset, 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 utelämnar vissa typer av automatisk typkonvertering.
Den fjärde konstruktorn anger en kopia av multisetRight.
Den femte konstruktorn anger en kopia av genom att multiset flytta Right.
Konstruktorerna 6, 7 och 8 anger en initializer_list som elementen ska kopieras från.
De följande tre konstruktorerna kopierar intervallet [First, Last) för en multiset med ökad explicititet i att ange typen av jämförelsefunktion och allokeringsfunktion.
Exempel
// multiset_ctor.cpp
// compile with: /EHsc
#include <set>
#include <iostream>
int main()
{
using namespace std;
//multiset <int>::iterator ms1_Iter, ms2_Iter, ms3_Iter;
multiset <int>::iterator ms4_Iter, ms5_Iter, ms6_Iter, ms7_Iter;
// Create an empty multiset ms0 of key type integer
multiset <int> ms0;
// Create an empty multiset ms1 with the key comparison
// function of less than, then insert 4 elements
multiset <int, less<int> > ms1;
ms1.insert(10);
ms1.insert(20);
ms1.insert(20);
ms1.insert(40);
// Create an empty multiset ms2 with the key comparison
// function of greater than, then insert 2 elements
multiset <int, less<int> > ms2;
ms2.insert(10);
ms2.insert(20);
// Create a multiset ms3 with the
// allocator of multiset ms1
multiset <int>::allocator_type ms1_Alloc;
ms1_Alloc = ms1.get_allocator();
multiset <int> ms3(less<int>(), ms1_Alloc);
ms3.insert(30);
// Create a copy, multiset ms4, of multiset ms1
multiset <int> ms4(ms1);
// Create a multiset ms5 by copying the range ms1[ first, last)
multiset <int>::const_iterator ms1_bcIter, ms1_ecIter;
ms1_bcIter = ms1.begin();
ms1_ecIter = ms1.begin();
ms1_ecIter++;
ms1_ecIter++;
multiset <int> ms5(ms1_bcIter, ms1_ecIter);
// Create a multiset ms6 by copying the range ms4[ first, last)
// and with the allocator of multiset ms2
multiset <int>::allocator_type ms2_Alloc;
ms2_Alloc = ms2.get_allocator();
multiset <int> ms6(ms4.begin(), ++ms4.begin(), less<int>(), ms2_Alloc);
cout << "ms1 =";
for (auto i : ms1)
cout << " " << i;
cout << endl;
cout << "ms2 =";
for (auto i : ms2)
cout << " " << i;
cout << endl;
cout << "ms3 =";
for (auto i : ms3)
cout << " " << i;
cout << endl;
cout << "ms4 =";
for (auto i : ms4)
cout << " " << i;
cout << endl;
cout << "ms5 =";
for (auto i : ms5)
cout << " " << i;
cout << endl;
cout << "ms6 =";
for (auto i : ms6)
cout << " " << i;
cout << endl;
// Create a multiset by moving ms5
multiset<int> ms7(move(ms5));
cout << "ms7 =";
for (auto i : ms7)
cout << " " << i;
cout << endl;
// Create a multiset with an initializer_list
multiset<int> ms8({1, 2, 3, 4});
cout << "ms8=";
for (auto i : ms8)
cout << " " << i;
cout << endl;
}
multiset::operator=
Ersätter elementen i detta multiset med hjälp av element från en annan multiset.
multiset& operator=(const multiset& right);
multiset& operator=(multiset&& right);
Parameterar
Right
Från multiset vilka element kopieras eller flyttas.
Anmärkningar
operator= kopierar eller flyttar elementen till Right detta multiset, beroende på vilken referenstyp (lvalue eller rvalue) som används. Element som finns i detta multiset innan operator= körs ignoreras.
Exempel
// multiset_operator_as.cpp
// compile with: /EHsc
#include <multiset>
#include <iostream>
int main( )
{
using namespace std;
multiset<int> v1, v2, v3;
multiset<int>::iterator iter;
v1.insert(10);
cout << "v1 = " ;
for (iter = v1.begin(); iter != v1.end(); iter++)
cout << *iter << " ";
cout << endl;
v2 = v1;
cout << "v2 = ";
for (iter = v2.begin(); iter != v2.end(); iter++)
cout << *iter << " ";
cout << endl;
// move v1 into v2
v2.clear();
v2 = move(v1);
cout << "v2 = ";
for (iter = v2.begin(); iter != v2.end(); iter++)
cout << *iter << " ";
cout << endl;
}
multiset::pointer
En typ som ger en pekare till ett element i en multiset.
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 multiset objekt.
multiset::rbegin
Returnerar en iterator som adresserar det första elementet i en omvänd multiuppsättning.
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 multiset eller adresserar vad som hade varit det sista elementet i det oreverserade multiset.
Anmärkningar
rbegin används med en omvänd multiset precis som rbegin används med en multiset.
Om returvärdet rbegin för har tilldelats till en const_reverse_iteratormultiset kan objektet inte ändras. Om returvärdet rbegin för har tilldelats till en reverse_iteratormultiset kan objektet ändras.
rbegin kan användas för att iterera genom en multiset bakåt.
Exempel
// multiset_rbegin.cpp
// compile with: /EHsc
#include <set>
#include <iostream>
int main( )
{
using namespace std;
multiset <int> ms1;
multiset <int>::iterator ms1_Iter;
multiset <int>::reverse_iterator ms1_rIter;
ms1.insert( 10 );
ms1.insert( 20 );
ms1.insert( 30 );
ms1_rIter = ms1.rbegin( );
cout << "The first element in the reversed multiset is "
<< *ms1_rIter << "." << endl;
// begin can be used to start an iteration
// through a multiset in a forward order
cout << "The multiset is:";
for ( ms1_Iter = ms1.begin( ) ; ms1_Iter != ms1.end( ); ms1_Iter++ )
cout << " " << *ms1_Iter;
cout << endl;
// rbegin can be used to start an iteration
// through a multiset in a reverse order
cout << "The reversed multiset is:";
for ( ms1_rIter = ms1.rbegin( ) ; ms1_rIter != ms1.rend( ); ms1_rIter++ )
cout << " " << *ms1_rIter;
cout << endl;
// a multiset element can be erased by dereferencing to its key
ms1_rIter = ms1.rbegin( );
ms1.erase ( *ms1_rIter );
ms1_rIter = ms1.rbegin( );
cout << "After the erasure, the first element "
<< "in the reversed multiset is "<< *ms1_rIter << "."
<< endl;
}
The first element in the reversed multiset is 30.
The multiset is: 10 20 30
The reversed multiset is: 30 20 10
After the erasure, the first element in the reversed multiset is 20.
multiset::reference
En typ som innehåller en referens till ett element som lagras i en multiset.
typedef typename allocator_type::reference reference;
Exempel
// multiset_ref.cpp
// compile with: /EHsc
#include <set>
#include <iostream>
int main( )
{
using namespace std;
multiset <int> ms1;
ms1.insert( 10 );
ms1.insert( 20 );
// Declare and initialize a reference &Ref1 to the 1st element
const int &Ref1 = *ms1.begin( );
cout << "The first element in the multiset is "
<< Ref1 << "." << endl;
}
The first element in the multiset is 10.
multiset::rend
Returnerar en iterator som adresserar platsen som lyckades det sista elementet i en omvänd multiset.
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 multiset (platsen som hade föregått det första elementet i det oreverserade multiset).
Anmärkningar
rend används med en omvänd multiuppsättning precis som end används med en multiset.
Om returvärdet rend för har tilldelats till en const_reverse_iteratormultiset kan objektet inte ändras. Om returvärdet rend för har tilldelats till en reverse_iteratormultiset kan objektet ändras.
rend kan användas för att testa om en omvänd iterator har nått slutet av sin flermängd.
Värdet som returneras av rend ska inte derefereras.
Exempel
// multiset_rend.cpp
// compile with: /EHsc
#include <set>
#include <iostream>
int main() {
using namespace std;
multiset <int> ms1;
multiset <int>::iterator ms1_Iter;
multiset <int>::reverse_iterator ms1_rIter;
multiset <int>::const_reverse_iterator ms1_crIter;
ms1.insert( 10 );
ms1.insert( 20 );
ms1.insert( 30 );
ms1_rIter = ms1.rend( ) ;
ms1_rIter--;
cout << "The last element in the reversed multiset is "
<< *ms1_rIter << "." << endl;
// end can be used to terminate an iteration
// through a multiset in a forward order
cout << "The multiset is: ";
for ( ms1_Iter = ms1.begin( ) ; ms1_Iter != ms1.end( ); ms1_Iter++ )
cout << *ms1_Iter << " ";
cout << "." << endl;
// rend can be used to terminate an iteration
// through a multiset in a reverse order
cout << "The reversed multiset is: ";
for ( ms1_rIter = ms1.rbegin( ) ; ms1_rIter != ms1.rend( ); ms1_rIter++ )
cout << *ms1_rIter << " ";
cout << "." << endl;
ms1_rIter = ms1.rend( );
ms1_rIter--;
ms1.erase ( *ms1_rIter );
ms1_rIter = ms1.rend( );
--ms1_rIter;
cout << "After the erasure, the last element in the "
<< "reversed multiset is " << *ms1_rIter << "." << endl;
}
multiset::reverse_iterator
En typ som tillhandahåller en dubbelriktad iterator som kan läsa eller ändra ett element i en omvänd multiuppsättning.
typedef std::reverse_iterator<iterator> reverse_iterator;
Anmärkningar
En typ reverse_iterator används för att iterera genom det multiset omvända.
Exempel
Se exempel för rbegin ett exempel på hur du deklarerar och använder reverse_iterator.
multiset::size
Returnerar antalet element i multiset.
size_type size() const;
Returvärde
Den aktuella längden på multiset.
Exempel
// multiset_size.cpp
// compile with: /EHsc
#include <set>
#include <iostream>
int main( )
{
using namespace std;
multiset <int> ms1;
multiset <int> :: size_type i;
ms1.insert( 1 );
i = ms1.size( );
cout << "The multiset length is " << i << "." << endl;
ms1.insert( 2 );
i = ms1.size( );
cout << "The multiset length is now " << i << "." << endl;
}
The multiset length is 1.
The multiset length is now 2.
multiset::size_type
En osignerad heltalstyp som kan representera antalet element i en multiset.
typedef typename allocator_type::size_type size_type;
Exempel
Se exempel för size ett exempel på hur du deklarerar och använder size_type
multiset::swap
Utbyter elementen i två multiuppsättningar.
void swap(
multiset<Key, Compare, Allocator>& right);
Parameterar
Right
Argumentet multiset som tillhandahåller de element som ska växlas med mål multiseten.
Anmärkningar
Medlemsfunktionen ogiltigförklarar inga referenser, pekare eller iteratorer som anger element i de två multiuppsättningar vars element utbyts.
Exempel
// multiset_swap.cpp
// compile with: /EHsc
#include <set>
#include <iostream>
int main( )
{
using namespace std;
multiset <int> ms1, ms2, ms3;
multiset <int>::iterator ms1_Iter;
ms1.insert( 10 );
ms1.insert( 20 );
ms1.insert( 30 );
ms2.insert( 100 );
ms2.insert( 200 );
ms3.insert( 300 );
cout << "The original multiset ms1 is:";
for ( ms1_Iter = ms1.begin( ); ms1_Iter != ms1.end( ); ms1_Iter++ )
cout << " " << *ms1_Iter;
cout << "." << endl;
// This is the member function version of swap
ms1.swap( ms2 );
cout << "After swapping with ms2, list ms1 is:";
for ( ms1_Iter = ms1.begin( ); ms1_Iter != ms1.end( ); ms1_Iter++ )
cout << " " << *ms1_Iter;
cout << "." << endl;
// This is the specialized template version of swap
swap( ms1, ms3 );
cout << "After swapping with ms3, list ms1 is:";
for ( ms1_Iter = ms1.begin( ); ms1_Iter != ms1.end( ); ms1_Iter++ )
cout << " " << *ms1_Iter;
cout << "." << endl;
}
The original multiset ms1 is: 10 20 30.
After swapping with ms2, list ms1 is: 100 200.
After swapping with ms3, list ms1 is: 300.
multiset::upper_bound
Returnerar en iterator till det första elementet i en multiset med en nyckel som är större än en angiven nyckel.
const_iterator upper_bound(const Key& key) const;
iterator upper_bound(const Key& key);
Parameterar
key
Argumentnyckeln som ska jämföras med sorteringsnyckeln för ett element från den multiset som genomsöks.
Returvärde
En iterator eller const_iterator som adresserar platsen för ett element i en multiset med en nyckel som är större än argumentnyckeln, eller som adresserar platsen som lyckas med det sista elementet i multiset om ingen matchning hittas för nyckeln.
Exempel
// multiset_upper_bound.cpp
// compile with: /EHsc
#include <set>
#include <iostream>
int main( )
{
using namespace std;
multiset <int> ms1;
multiset <int> :: const_iterator ms1_AcIter, ms1_RcIter;
ms1.insert( 10 );
ms1.insert( 20 );
ms1.insert( 30 );
ms1_RcIter = ms1.upper_bound( 20 );
cout << "The first element of multiset ms1 with a key greater "
<< "than 20 is: " << *ms1_RcIter << "." << endl;
ms1_RcIter = ms1.upper_bound( 30 );
// If no match is found for the key, end( ) is returned
if ( ms1_RcIter == ms1.end( ) )
cout << "The multiset ms1 doesn't have an element "
<< "with a key greater than 30." << endl;
else
cout << "The element of multiset ms1 with a key > 40 is: "
<< *ms1_RcIter << "." << endl;
// The element at a specific location in the multiset can be
// found using a dereferenced iterator addressing the location
ms1_AcIter = ms1.begin( );
ms1_RcIter = ms1.upper_bound( *ms1_AcIter );
cout << "The first element of ms1 with a key greater than"
<< endl << "that of the initial element of ms1 is: "
<< *ms1_RcIter << "." << endl;
}
The first element of multiset ms1 with a key greater than 20 is: 30.
The multiset ms1 doesn't have an element with a key greater than 30.
The first element of ms1 with a key greater than
that of the initial element of ms1 is: 20.
multiset::value_comp
Hämtar en kopia av jämförelseobjektet som används för att beställa elementvärden i en multiset.
value_compare value_comp() const;
Returvärde
Returnerar det funktionsobjekt som används multiset för att ordna dess element, vilket är mallparametern Compare.
Mer information om Comparefinns i avsnittet Kommentarer i multiset ämnet Klass .
Anmärkningar
Det lagrade objektet definierar medlemsfunktionen:
bool operator( const Key&_xVal, const Key&_yVal);
som returnerar true om _xVal föregår och inte är lika med _yVal i sorteringsordningen.
Både key_compare och value_compare är synonymer för mallparametern Compare. Båda typerna tillhandahålls för klassuppsättningen och multiset, där de är identiska, för kompatibilitet med klasskartan och multimap, där de är distinkta.
Exempel
// multiset_value_comp.cpp
// compile with: /EHsc
#include <set>
#include <iostream>
int main( )
{
using namespace std;
multiset <int, less<int> > ms1;
multiset <int, less<int> >::value_compare vc1 = ms1.value_comp( );
bool result1 = vc1( 2, 3 );
if( result1 == true )
{
cout << "vc1( 2,3 ) returns value of true, "
<< "where vc1 is the function object of ms1."
<< endl;
}
else
{
cout << "vc1( 2,3 ) returns value of false, "
<< "where vc1 is the function object of ms1."
<< endl;
}
set <int, greater<int> > ms2;
set<int, greater<int> >::value_compare vc2 = ms2.value_comp( );
bool result2 = vc2( 2, 3 );
if( result2 == true )
{
cout << "vc2( 2,3 ) returns value of true, "
<< "where vc2 is the function object of ms2."
<< endl;
}
else
{
cout << "vc2( 2,3 ) returns value of false, "
<< "where vc2 is the function object of ms2."
<< endl;
}
}
vc1( 2,3 ) returns value of true, where vc1 is the function object of ms1.
vc2( 2,3 ) returns value of false, where vc2 is the function object of ms2.
multiset::value_compare
Den typ som tillhandahåller ett funktionsobjekt som kan jämföra två sorteringsnycklar för att fastställa deras relativa ordning i multiset.
typedef key_compare value_compare;
Anmärkningar
value_compare är synonymt med mallparametern Compare.
Både key_compare och value_compare är synonymer för mallparametern Compare. Båda typerna tillhandahålls för klassuppsättningen och multiset, där de är identiska, för kompatibilitet med klasskartan och multimap, där de är distinkta.
Mer information om Comparefinns i avsnittet Anmärkningar i ämnet klass för flera uppsättningar .
Exempel
Se exemplet för value_comp ett exempel på hur du deklarerar och använder value_compare.
multiset::value_type
En typ som beskriver ett objekt som lagras som ett element som ett multiset i sin kapacitet som ett värde.
typedef Key value_type;
Anmärkningar
value_type är synonymt med mallparametern Key.
Både key_type och value_type är synonymer för mallparametern Key. Båda typerna tillhandahålls för klassuppsättningen och flera uppsättningar, där de är identiska, för kompatibilitet med klasskartan och multimappen, där de är distinkta.
Mer information om Keyfinns i avsnittet Kommentarer i ämnet.
Exempel
// multiset_value_type.cpp
// compile with: /EHsc
#include <set>
#include <iostream>
int main( )
{
using namespace std;
multiset <int> ms1;
multiset <int>::iterator ms1_Iter;
multiset <int> :: value_type svt_Int; // Declare value_type
svt_Int = 10; // Initialize value_type
multiset <int> :: key_type skt_Int; // Declare key_type
skt_Int = 20; // Initialize key_type
ms1.insert( svt_Int ); // Insert value into s1
ms1.insert( skt_Int ); // Insert key into s1
// a multiset accepts key_types or value_types as elements
cout << "The multiset has elements:";
for ( ms1_Iter = ms1.begin( ) ; ms1_Iter != ms1.end( ); ms1_Iter++ )
cout << " " << *ms1_Iter;
cout << "." << endl;
}
The multiset has elements: 10 20.
Se även
Behållare
Trådsäkerhet i C++ Standard Library
Standardbiblioteksreferens för C++