Delen via


unordered_multiset-klasse

In de klassesjabloon wordt een object beschreven dat een reeks elementen van het type const Keybepaalt. De reeks is zwak gerangschikt door een hash-functie, die de reeks partitioneert in een geordende set subsequences die buckets worden genoemd. Binnen elke bucket bepaalt een vergelijkingsfunctie of een paar elementen gelijkwaardige volgorde heeft. Elk element fungeert als een sorteersleutel en een waarde. De reeks wordt weergegeven op een manier die het opzoeken, invoegen en verwijderen van een willekeurig element mogelijk maakt met een aantal bewerkingen die onafhankelijk kunnen zijn van het aantal elementen in de reeks (constante tijd), ten minste wanneer alle buckets ongeveer even lang zijn. Als alle elementen zich in één bucket bevinden, is het aantal bewerkingen evenredig met het aantal elementen in de reeks (lineaire tijd). Als u een element invoegt, worden er bovendien geen iterators meer gebruikt en worden alleen de iterators die naar het verwijderde element verwijzen, ongeldig.

Syntaxis

template <class Key,
    class Hash = std::hash<Key>,
    class Pred = std::equal_to<Key>,
    class Alloc = std::allocator<Key>>
class unordered_multiset;

Parameterwaarden

Sleutel
Het sleuteltype.

Hekje
Het objecttype hashfunctie.

Pred
Het objecttype gelijkheidsvergelijkingsfunctie.

Alloc
De allocatorklasse.

Leden

Typedefinitie Beschrijving
allocator_type Het type allocator voor het beheren van opslag.
const_iterator Het type van een constante iterator voor de gecontroleerde reeks.
const_local_iterator Het type van een constante bucket-iterator voor de gecontroleerde reeks.
const_pointer Het type constante aanwijzer naar een element.
const_reference Het type constante verwijzing naar een element.
difference_type Het type ondertekende afstand tussen twee elementen.
Hasher Het type hash-functie.
Iterator Het type iterator voor de gecontroleerde reeks.
key_equal Het type vergelijkingsfunctie.
key_type Het type bestelsleutel.
local_iterator Het type bucket-iterator voor de gecontroleerde reeks.
aanwijzer Het type aanwijzer naar een element.
referentie Het type verwijzing naar een element.
size_type Het type niet-ondertekende afstand tussen twee elementen.
value_type Het type element.
Lid, functie Beschrijving
beginnen Geeft het begin van de gecontroleerde reeks aan.
emmer Hiermee wordt het bucketnummer voor een sleutelwaarde opgehaald.
bucket_count Hiermee haalt u het aantal buckets op.
bucket_size Hiermee wordt de grootte van een bucket opgehaald.
cbegin Geeft het begin van de gecontroleerde reeks aan.
cend Geeft het einde van de gecontroleerde reeks aan.
wissen Hiermee verwijdert u alle elementen.
bevatC++20 Controleert of er een element is met de opgegeven sleutel.
aantal Hiermee wordt het aantal elementen gevonden dat overeenkomt met een opgegeven sleutel.
emplace Hiermee voegt u een element toe dat is gebouwd.
emplace_hint Hiermee voegt u een element toe dat op zijn plaats is gemaakt, met hint.
leeg Test of er geen elementen aanwezig zijn.
einde Geeft het einde van de gecontroleerde reeks aan.
equal_range Hiermee vindt u een bereik dat overeenkomt met een opgegeven sleutel.
wissen Hiermee verwijdert u elementen op opgegeven posities.
vinden Hiermee zoekt u een element dat overeenkomt met een opgegeven sleutel.
get_allocator Hiermee haalt u het opgeslagen allocatorobject op.
hash_function Hiermee haalt u het opgeslagen hash-functieobject op.
invoegen Voegt elementen toe.
key_eq Hiermee haalt u het opgeslagen vergelijkingsfunctieobject op.
load_factor Telt de gemiddelde elementen per bucket.
max_bucket_count Hiermee haalt u het maximum aantal buckets op.
max_load_factor Hiermee worden de maximumelementen per bucket opgehaald of ingesteld.
max_size Hiermee haalt u de maximale grootte van de gecontroleerde reeks op.
Rehash Hiermee wordt de hash-tabel opnieuw opgebouwd.
grootte Telt het aantal elementen.
wisselen Hiermee wordt de inhoud van twee containers gewisseld.
unordered_multiset Maakt een containerobject.
Operateur Beschrijving
unordered_multiset::operator= Kopieert een hash-tabel.

Opmerkingen

Het object rangorde de volgorde die wordt beheerd door twee opgeslagen objecten aan te roepen, een vergelijkingsfunctieobject van het type unordered_multiset::key_equal en een hash-functieobject van het type unordered_multiset::hasher. U opent het eerste opgeslagen object door de lidfunctie aan te roepen unordered_multiset::key_eq(); en u opent het tweede opgeslagen object door de lidfunctie aan te roepen unordered_multiset::hash_function(). Met name voor alle waarden X en Y van het type Keyretourneert de aanroep key_eq()(X, Y) alleen waar als de twee argumentwaarden gelijkwaardige volgorde hebben; de aanroep hash_function()(keyval) resulteert in een verdeling van de waarden van het type size_t. In tegenstelling tot klassesjabloon unordered_setzorgt een object van het type unordered_multiset er niet voor dat key_eq()(X, Y) deze altijd onwaar is voor twee elementen van de gecontroleerde reeks. (Sleutels hoeven niet uniek te zijn.)

Het object slaat ook een maximale belastingsfactor op, waarmee het maximale gewenste gemiddelde aantal elementen per bucket wordt opgegeven. Als het invoegen van een element ervoor zorgt dat unordered_multiset::load_factor() de maximale belastingfactor overschrijdt, verhoogt de container het aantal buckets en herbouwt de hash-tabel indien nodig.

De werkelijke volgorde van elementen in de gecontroleerde volgorde is afhankelijk van de hash-functie, de vergelijkingsfunctie, de volgorde van invoeging, de maximale laadfactor en het huidige aantal buckets. U kunt in het algemeen de volgorde van elementen in de gecontroleerde volgorde niet voorspellen. U kunt er echter altijd zeker van zijn dat elke subset van elementen met gelijkwaardige volgorde grenzen aan de gecontroleerde volgorde.

Het object wijst en maakt opslag vrij voor de volgorde die wordt beheerd via een opgeslagen allocatorobject van het type unordered_multiset::allocator_type. Een dergelijk allocatorobject moet dezelfde externe interface hebben als een object van het type allocator. Houd er rekening mee dat het opgeslagen allocatorobject niet wordt gekopieerd wanneer het containerobject wordt toegewezen.

Behoeften

Rubriek:<unordered_set>

naamruimte: std

unordered_multiset::allocator_type

Het type allocator voor het beheren van opslag.

typedef Alloc allocator_type;

Opmerkingen

Het type is een synoniem voor de sjabloonparameter Alloc.

Voorbeeld

// std__unordered_set__unordered_multiset_allocator_type.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>

typedef std::unordered_multiset<char> Myset;
typedef std::allocator<std::pair<const char, int> > Myalloc;
int main()
{
    Myset c1;

    Myset::allocator_type al = c1.get_allocator();
    std::cout << "al == std::allocator() is "
        << std::boolalpha << (al == Myalloc()) << std::endl;

    return (0);
}
al == std::allocator() is true

unordered_multiset::begin

Hiermee wordt het begin van de gecontroleerde reeks of een bucket aangeduid.

iterator begin();

const_iterator begin() const;

local_iterator begin(size_type nbucket);

const_local_iterator begin(size_type nbucket) const;

Parameterwaarden

nbucket
Het bucketnummer.

Opmerkingen

De eerste twee lidfuncties retourneren een doorstuur iterator die verwijst naar het eerste element van de reeks (of net voorbij het einde van een lege reeks). De laatste twee lidfuncties retourneren een doorstuur iterator die verwijst naar het eerste element van bucket nbucket (of net voorbij het einde van een lege bucket).

Voorbeeld

// std__unordered_set__unordered_multiset_begin.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>

typedef std::unordered_multiset<char> Myset;
int main()
{
    Myset c1;

    c1.insert('a');
    c1.insert('b');
    c1.insert('c');

    // display contents "[c] [b] [a]"
    for (Myset::const_iterator it = c1.begin();
        it != c1.end(); ++it)
        std::cout << "[" << *it << "] ";
    std::cout << std::endl;

    // inspect first two items "[c] [b]"
    Myset::iterator it2 = c1.begin();
    std::cout << "[" << *it2 << "] ";
    ++it2;
    std::cout << "[" << *it2 << "] ";
    std::cout << std::endl;

    // inspect bucket containing 'a'
    Myset::const_local_iterator lit = c1.begin(c1.bucket('a'));
    std::cout << "[" << *lit << "] ";

    return (0);
}
[c] [b] [a]
[c] [b]
[a]

unordered_multiset::bucket

Hiermee wordt het bucketnummer voor een sleutelwaarde opgehaald.

size_type bucket(const Key& keyval) const;

Parameterwaarden

sleutelval
De sleutelwaarde die moet worden toegewezen.

Opmerkingen

De lidfunctie retourneert het bucketnummer dat momenteel overeenkomt met de sleutelwaarde keyval.

Voorbeeld

// std__unordered_set__unordered_multiset_bucket.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>

typedef std::unordered_multiset<char> Myset;
int main()
{
    Myset c1;

    c1.insert('a');
    c1.insert('b');
    c1.insert('c');

    // display contents "[c] [b] [a] "
    for (Myset::const_iterator it = c1.begin();
        it != c1.end(); ++it)
        std::cout << "[" << *it << "] ";
    std::cout << std::endl;

    // display buckets for keys
    Myset::size_type bs = c1.bucket('a');
    std::cout << "bucket('a') == " << bs << std::endl;
    std::cout << "bucket_size(" << bs << ") == " << c1.bucket_size(bs)
        << std::endl;

    return (0);
}
[c] [b] [a]
bucket('a') == 7
bucket_size(7) == 1

unordered_multiset::bucket_count

Hiermee haalt u het aantal buckets op.

size_type bucket_count() const;

Opmerkingen

De lidfunctie retourneert het huidige aantal buckets.

Voorbeeld

// std__unordered_set__unordered_multiset_bucket_count.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>

typedef std::unordered_multiset<char> Myset;
int main()
{
    Myset c1;

    c1.insert('a');
    c1.insert('b');
    c1.insert('c');

    // display contents "[c] [b] [a] "
    for (Myset::const_iterator it = c1.begin();
        it != c1.end(); ++it)
        std::cout << "[" << *it << "] ";
    std::cout << std::endl;

    // inspect current parameters
    std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;
    std::cout << "load_factor() == " << c1.load_factor() << std::endl;
    std::cout << "max_bucket_count() == "
        << c1.max_bucket_count() << std::endl;
    std::cout << "max_load_factor() == "
        << c1.max_load_factor() << std::endl;
    std::cout << std::endl;

    // change max_load_factor and redisplay
    c1.max_load_factor(0.10f);
    std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;
    std::cout << "load_factor() == " << c1.load_factor() << std::endl;
    std::cout << "max_bucket_count() == "
        << c1.max_bucket_count() << std::endl;
    std::cout << "max_load_factor() == "
        << c1.max_load_factor() << std::endl;
    std::cout << std::endl;

    // rehash and redisplay
    c1.rehash(100);
    std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;
    std::cout << "load_factor() == " << c1.load_factor() << std::endl;
    std::cout << "max_bucket_count() == "
        << c1.max_bucket_count() << std::endl;
    std::cout << "max_load_factor() == "
        << c1.max_load_factor() << std::endl;

    return (0);
}
[c] [b] [a]
bucket_count() == 8
load_factor() == 0.375
max_bucket_count() == 8
max_load_factor() == 4

bucket_count() == 8
load_factor() == 0.375
max_bucket_count() == 8
max_load_factor() == 0.1

bucket_count() == 128
load_factor() == 0.0234375
max_bucket_count() == 128
max_load_factor() == 0.1

unordered_multiset::bucket_size

Hiermee wordt de grootte van een bucket opgehaald

size_type bucket_size(size_type nbucket) const;

Parameterwaarden

nbucket
Het bucketnummer.

Opmerkingen

De lidfuncties retourneren de grootte van bucketnummer nbucket.

Voorbeeld

// std__unordered_set__unordered_multiset_bucket_size.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>

typedef std::unordered_multiset<char> Myset;
int main()
{
    Myset c1;

    c1.insert('a');
    c1.insert('b');
    c1.insert('c');

    // display contents "[c] [b] [a] "
    for (Myset::const_iterator it = c1.begin();
        it != c1.end(); ++it)
        std::cout << "[" << *it << "] ";
    std::cout << std::endl;

    // display buckets for keys
    Myset::size_type bs = c1.bucket('a');
    std::cout << "bucket('a') == " << bs << std::endl;
    std::cout << "bucket_size(" << bs << ") == " << c1.bucket_size(bs)
        << std::endl;

    return (0);
}
[c] [b] [a]
bucket('a') == 7
bucket_size(7) == 1

unordered_multiset::cbegin

Retourneert een const iterator die het eerste element in het bereik adresseert.

const_iterator cbegin() const;

Retourwaarde

Een const iterator voor forward-access die verwijst naar het eerste element van het bereik, of de locatie vlak voorbij het einde van een leeg bereik (voor een leeg bereik, cbegin() == cend()).

Opmerkingen

Met de retourwaarde van cbeginkan de elementen in het bereik niet worden gewijzigd.

U kunt deze lidfunctie gebruiken in plaats van de functie begin() lid om te garanderen dat de retourwaarde const_iteratoris. Normaal gesproken wordt deze gebruikt in combinatie met het trefwoord voor automatische type aftrek, zoals wordt weergegeven in het volgende voorbeeld. In het voorbeeld kunt u overwegen Container te zijn als een wijzigbare container (niet-const) van elk type dat ondersteuning biedt voor begin() en cbegin().

auto i1 = Container.begin();
// i1 is Container<T>::iterator

auto i2 = Container.cbegin();
// i2 is Container<T>::const_iterator

unordered_multiset::cend

Retourneert een const iterator die de locatie net voorbij het laatste element in een bereik adresseert.

const_iterator cend() const;

Retourwaarde

Een const iterator voor doorgestuurde toegang die net buiten het einde van het bereik wijst.

Opmerkingen

cend wordt gebruikt om te testen of een iterator het einde van het bereik heeft doorstaan.

U kunt deze lidfunctie gebruiken in plaats van de functie end() lid om te garanderen dat de retourwaarde const_iteratoris. Normaal gesproken wordt deze gebruikt in combinatie met het trefwoord voor automatische type aftrek, zoals wordt weergegeven in het volgende voorbeeld. In het voorbeeld kunt u overwegen Container te zijn als een wijzigbare container (niet-const) van elk type dat ondersteuning biedt voor end() en cend().

auto i1 = Container.end();
// i1 is Container<T>::iterator

auto i2 = Container.cend();
// i2 is Container<T>::const_iterator

De waarde die wordt geretourneerd door cend mag niet worden afgetrokken.

unordered_multiset::clear

Hiermee verwijdert u alle elementen.

void clear();

Opmerkingen

De lidfunctie roept unordered_multiset::gum(unordered_multiset::begin(),unordered_multiset::end()) aan.

Voorbeeld

// std__unordered_set__unordered_multiset_clear.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>

typedef std::unordered_multiset<char> Myset;
int main()
{
    Myset c1;

    c1.insert('a');
    c1.insert('b');
    c1.insert('c');

    // display contents "[c] [b] [a] "
    for (Myset::const_iterator it = c1.begin();
        it != c1.end(); ++it)
        std::cout << "[" << *it << "] ";
    std::cout << std::endl;

    // clear the container and reinspect
    c1.clear();
    std::cout << "size == " << c1.size() << std::endl;
    std::cout << "empty() == " << std::boolalpha << c1.empty() << std::endl;
    std::cout << std::endl;

    c1.insert('d');
    c1.insert('e');

    // display contents "[e] [d] "
    for (Myset::const_iterator it = c1.begin();
        it != c1.end(); ++it)
        std::cout << "[" << *it << "] ";
    std::cout << std::endl;

    std::cout << "size == " << c1.size() << std::endl;
    std::cout << "empty() == " << std::boolalpha << c1.empty() << std::endl;

    return (0);
}
[c] [b] [a]
size == 0
empty() == true

[e] [d]
size == 2
empty() == false

unordered_multiset::const_iterator

Het type van een constante iterator voor de gecontroleerde reeks.

typedef T1 const_iterator;

Opmerkingen

Het type beschrijft een object dat kan fungeren als een constante doorstuurserver voor de gecontroleerde reeks. Het wordt hier beschreven als synoniem voor het door de implementatie gedefinieerde type T1.

Voorbeeld

// std__unordered_set__unordered_multiset_const_iterator.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>

typedef std::unordered_multiset<char> Myset;
int main()
{
    Myset c1;

    c1.insert('a');
    c1.insert('b');
    c1.insert('c');

    // display contents "[c] [b] [a]"
    for (Myset::const_iterator it = c1.begin();
        it != c1.end(); ++it)
        std::cout << "[" << *it << "] ";
    std::cout << std::endl;

    return (0);
}
[c] [b] [a]

unordered_multiset::const_local_iterator

Het type van een constante bucket-iterator voor de gecontroleerde reeks.

typedef T5 const_local_iterator;

Opmerkingen

Het type beschrijft een object dat kan fungeren als een constante doorstuurserver voor een bucket. Het wordt hier beschreven als synoniem voor het door de implementatie gedefinieerde type T5.

Voorbeeld

// std__unordered_set__unordered_multiset_const_local_iterator.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>

typedef std::unordered_multiset<char> Myset;
int main()
{
    Myset c1;

    c1.insert('a');
    c1.insert('b');
    c1.insert('c');

    // display contents "[c] [b] [a]"
    for (Myset::const_iterator it = c1.begin();
        it != c1.end(); ++it)
        std::cout << "[" << *it << "] ";
    std::cout << std::endl;

    // inspect bucket containing 'a'
    Myset::const_local_iterator lit = c1.begin(c1.bucket('a'));
    std::cout << "[" << *lit << "] ";

    return (0);
}
[c] [b] [a]
[a]

unordered_multiset::const_pointer

Het type constante aanwijzer naar een element.

typedef Alloc::const_pointer const_pointer;

Opmerkingen

Het type beschrijft een object dat kan fungeren als een constante aanwijzer naar een element van de gecontroleerde reeks.

Voorbeeld

// std__unordered_set__unordered_multiset_const_pointer.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>

typedef std::unordered_multiset<char> Myset;
int main()
{
    Myset c1;

    c1.insert('a');
    c1.insert('b');
    c1.insert('c');

    // display contents "[c] [b] [a]"
    for (Myset::iterator it = c1.begin();
        it != c1.end(); ++it)
        {
        Myset::const_pointer p = &*it;
        std::cout << "[" << *p << "] ";
        }
    std::cout << std::endl;

    return (0);
}
[c] [b] [a]

unordered_multiset::const_reference

Het type constante verwijzing naar een element.

typedef Alloc::const_reference const_reference;

Opmerkingen

Het type beschrijft een object dat kan fungeren als een constante verwijzing naar een element van de gecontroleerde reeks.

Voorbeeld

// std__unordered_set__unordered_multiset_const_reference.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>

typedef std::unordered_multiset<char> Myset;
int main()
{
    Myset c1;

    c1.insert('a');
    c1.insert('b');
    c1.insert('c');

    // display contents "[c] [b] [a]"
    for (Myset::iterator it = c1.begin();
        it != c1.end(); ++it)
        {
        Myset::const_reference ref = *it;
        std::cout << "[" << ref << "] ";
        }
    std::cout << std::endl;

    return (0);
}
[c] [b] [a]

unordered_multiset::contains

Controleert of er een element is met de opgegeven sleutel in de unordered_multiset.

bool contains(const Key& key) const;
template<class K> bool contains(const K& key) const;

Parameterwaarden

K
Het type sleutel.

sleutel
De sleutelwaarde van het element waarnaar moet worden gezocht.

Retourwaarde

true als het element in de container is gevonden; false anders.

Opmerkingen

contains() is nieuw in C++20. Als u deze wilt gebruiken, geeft u de optie /std:c++20 of hoger compiler op.

template<class K> bool contains(const K& key) const neemt alleen deel aan overbelastingsresolutie als key_compare transparant is.

Voorbeeld

// Requires /std:c++20 or later
#include <unordered_set>
#include <iostream>

int main()
{
    std::unordered_multiset<int> theUnorderedMultiset = { 1, 2, 3 };

    std::cout << std::boolalpha; // so booleans show as 'true' or 'false'
    std::cout << theUnorderedMultiset.contains(1) << '\n';
    std::cout << theUnorderedMultiset.contains(4) << '\n';

    return 0;
}
true
false

unordered_multiset::count

Hiermee wordt het aantal elementen gevonden dat overeenkomt met een opgegeven sleutel.

size_type count(const Key& keyval) const;

Parameterwaarden

sleutelval
Sleutelwaarde om naar te zoeken.

Opmerkingen

De lidfunctie retourneert het aantal elementen in het bereik dat is gescheiden door unordered_multiset::equal_range(keyval).

Voorbeeld

// std__unordered_set__unordered_multiset_count.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>

typedef std::unordered_multiset<char> Myset;
int main()
{
    Myset c1;

    c1.insert('a');
    c1.insert('b');
    c1.insert('c');

    // display contents "[c] [b] [a]"
    for (Myset::const_iterator it = c1.begin();
        it != c1.end(); ++it)
        std::cout << "[" << *it << "] ";
    std::cout << std::endl;

    std::cout << "count('A') == " << c1.count('A') << std::endl;
    std::cout << "count('b') == " << c1.count('b') << std::endl;
    std::cout << "count('C') == " << c1.count('C') << std::endl;

    return (0);
}
[c] [b] [a]
count('A') == 0
count('b') == 1
count('C') == 0

unordered_multiset::d deductietype

Het type ondertekende afstand tussen twee elementen.

typedef T3 difference_type;

Opmerkingen

Het ondertekende geheel getaltype beschrijft een object dat het verschil kan vertegenwoordigen tussen de adressen van twee elementen in de gecontroleerde reeks. Het wordt hier beschreven als synoniem voor het door de implementatie gedefinieerde type T3.

Voorbeeld

// std__unordered_set__unordered_multiset_difference_type.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>

typedef std::unordered_multiset<char> Myset;
int main()
{
    Myset c1;

    c1.insert('a');
    c1.insert('b');
    c1.insert('c');

    // display contents "[c] [b] [a]"
    for (Myset::const_iterator it = c1.begin();
        it != c1.end(); ++it)
        std::cout << "[" << *it << "] ";
    std::cout << std::endl;

    // compute positive difference
    Myset::difference_type diff = 0;
    for (Myset::const_iterator it = c1.begin();
        it != c1.end(); ++it)
        ++diff;
    std::cout << "end()-begin() == " << diff << std::endl;

    // compute negative difference
    diff = 0;
    for (Myset::const_iterator it = c1.end();
        it != c1.begin(); --it)
        --diff;
    std::cout << "begin()-end() == " << diff << std::endl;

    return (0);
}
[c] [b] [a]
end()-begin() == 3
begin()-end() == -3

unordered_multiset::emplace

Hiermee voegt u een element in dat is samengesteld (er worden geen kopieer- of verplaatsingsbewerkingen uitgevoerd).

template <class... Args>
iterator emplace(Args&&... args);

Parameterwaarden

args
De argumenten die zijn doorgestuurd om een element te maken dat in de unordered_multiset moet worden ingevoegd.

Retourwaarde

Een iterator voor het zojuist ingevoegde element.

Opmerkingen

Er worden geen verwijzingen naar containerelementen ongeldig gemaakt door deze functie, maar mogelijk worden alle iterators ongeldig voor de container.

Als tijdens de invoeging een uitzondering wordt gegenereerd, maar niet voorkomt in de hash-functie van de container, wordt de container niet gewijzigd. Als de uitzondering wordt gegenereerd in de hash-functie, is het resultaat niet gedefinieerd.

Zie multiset::emplace voor een codevoorbeeld.

unordered_multiset::emplace_hint

Hiermee voegt u een element in dat is samengesteld (er worden geen kopieer- of verplaatsingsbewerkingen uitgevoerd), met een plaatsingshint.

template <class... Args>
iterator emplace_hint(
    const_iterator where,
    Args&&... args);

Parameterwaarden

args
De argumenten die zijn doorgestuurd om een element te maken dat in de unordered_multiset moet worden ingevoegd.

waar
Een hint met betrekking tot de plaats waar moet worden gezocht naar het juiste invoegpunt.

Retourwaarde

Een iterator voor het zojuist ingevoegde element.

Opmerkingen

Er worden geen verwijzingen naar containerelementen ongeldig gemaakt door deze functie, maar mogelijk worden alle iterators ongeldig voor de container.

Als tijdens de invoeging een uitzondering wordt gegenereerd, maar niet voorkomt in de hash-functie van de container, wordt de container niet gewijzigd. Als de uitzondering wordt gegenereerd in de hash-functie, is het resultaat niet gedefinieerd.

Zie set::emplace_hint voor een codevoorbeeld.

unordered_multiset::leeg

Test of er geen elementen aanwezig zijn.

bool empty() const;

Opmerkingen

De lidfunctie retourneert waar voor een lege beheerde reeks.

Voorbeeld

// std__unordered_set__unordered_multiset_empty.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>

typedef std::unordered_multiset<char> Myset;
int main()
{
    Myset c1;

    c1.insert('a');
    c1.insert('b');
    c1.insert('c');

    // display contents "[c] [b] [a]"
    for (Myset::const_iterator it = c1.begin();
        it != c1.end(); ++it)
        std::cout << "[" << *it << "] ";
    std::cout << std::endl;

    // clear the container and reinspect
    c1.clear();
    std::cout << "size == " << c1.size() << std::endl;
    std::cout << "empty() == " << std::boolalpha << c1.empty() << std::endl;
    std::cout << std::endl;

    c1.insert('d');
    c1.insert('e');

    // display contents "[e] [d]"
    for (Myset::const_iterator it = c1.begin();
        it != c1.end(); ++it)
        std::cout << "[" << *it << "] ";
    std::cout << std::endl;

    std::cout << "size == " << c1.size() << std::endl;
    std::cout << "empty() == " << std::boolalpha << c1.empty() << std::endl;

    return (0);
}
[c] [b] [a]
size == 0
empty() == true

[e] [d]
size == 2
empty() == false

unordered_multiset::end

Geeft het einde van de gecontroleerde reeks aan.

iterator end();
const_iterator end() const;
local_iterator end(size_type nbucket);
const_local_iterator end(size_type nbucket) const;

Parameterwaarden

nbucket
Het bucketnummer.

Opmerkingen

De eerste twee lidfuncties retourneren een doorstuur iterator die net buiten het einde van de reeks wijst. De laatste twee lidfuncties retourneren een doorstuur iterator die net voorbij het einde van bucket nbucket wijst.

Voorbeeld

// std__unordered_set__unordered_multiset_end.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>

typedef std::unordered_multiset<char> Myset;
int main()
{
    Myset c1;

    c1.insert('a');
    c1.insert('b');
    c1.insert('c');

    // display contents "[c] [b] [a]"
    for (Myset::const_iterator it = c1.begin();
        it != c1.end(); ++it)
        std::cout << "[" << *it << "] ";
    std::cout << std::endl;

    // inspect last two items "[a] [b]"
    Myset::iterator it2 = c1.end();
    --it2;
    std::cout << "[" << *it2 << "] ";
    --it2;
    std::cout << "[" << *it2 << "] ";
    std::cout << std::endl;

    // inspect bucket containing 'a'
    Myset::const_local_iterator lit = c1.end(c1.bucket('a'));
    --lit;
    std::cout << "[" << *lit << "] ";

    return (0);
}
[c] [b] [a]
[a] [b]
[a]

unordered_multiset::equal_range

Hiermee vindt u een bereik dat overeenkomt met een opgegeven sleutel.

std::pair<iterator, iterator>
    equal_range(const Key& keyval);

std::pair<const_iterator, const_iterator>
    equal_range(const Key& keyval) const;

Parameterwaarden

sleutelval
Sleutelwaarde om naar te zoeken.

Opmerkingen

De lidfunctie retourneert een paar iterators X , zodat [X.first, X.second) alleen die elementen van de gecontroleerde reeks worden gescheiden die equivalente volgorde hebben met keyval. Als er geen dergelijke elementen bestaan, worden beide iterators end().

Voorbeeld

// std__unordered_set__unordered_multiset_equal_range.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>

typedef std::unordered_multiset<char> Myset;
int main()
{
    Myset c1;

    c1.insert('a');
    c1.insert('b');
    c1.insert('c');

    // display contents "[c] [b] [a]"
    for (Myset::const_iterator it = c1.begin();
        it != c1.end(); ++it)
        std::cout << "[" << *it << "] ";
    std::cout << std::endl;

    // display results of failed search
    std::pair<Myset::iterator, Myset::iterator> pair1 =
        c1.equal_range('x');
    std::cout << "equal_range('x'):";
    for (; pair1.first != pair1.second; ++pair1.first)
        std::cout << "[" << *pair1.first << "] ";
    std::cout << std::endl;

    // display results of successful search
    pair1 = c1.equal_range('b');
    std::cout << "equal_range('b'):";
    for (; pair1.first != pair1.second; ++pair1.first)
        std::cout << "[" << *pair1.first << "] ";
    std::cout << std::endl;

    return (0);
}
[c] [b] [a]
equal_range('x'):
equal_range('b'): [b]

unordered_multiset::wissen

Hiermee verwijdert u een element of een reeks elementen in een unordered_multiset uit opgegeven posities of verwijdert u elementen die overeenkomen met een opgegeven sleutel.

iterator erase(
    const_iterator Where);

iterator erase(
    const_iterator First,
    const_iterator Last);

size_type erase(
    const key_type& Key);

Parameterwaarden

Waar
Positie van het element dat moet worden verwijderd.

Eerste
Positie van het eerste element dat moet worden verwijderd.

laatste
Plaats net buiten het laatste element dat moet worden verwijderd.

Sleutel
De sleutelwaarde van de elementen die moeten worden verwijderd.

Retourwaarde

Voor de eerste twee lidfuncties, een bidirectionele iterator die het eerste element aanwijst dat buiten alle verwijderde elementen blijft, of een element dat het einde van de unordered_multiset is als er geen dergelijk element bestaat.

Voor de functie derde lid wordt het aantal elementen geretourneerd dat uit de unordered_multiset is verwijderd.

Opmerkingen

Zie set::erase voor een codevoorbeeld.

unordered_multiset::find

Hiermee zoekt u een element dat overeenkomt met een opgegeven sleutel.

const_iterator find(const Key& keyval) const;

Parameterwaarden

sleutelval
Sleutelwaarde om naar te zoeken.

Opmerkingen

De lidfunctie retourneert unordered_multiset::equal_range(keyval).first.

Voorbeeld

// std__unordered_set__unordered_multiset_find.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>

typedef std::unordered_multiset<char> Myset;
int main()
{
    Myset c1;

    c1.insert('a');
    c1.insert('b');
    c1.insert('c');

    // display contents "[c] [b] [a]"
    for (Myset::const_iterator it = c1.begin();
        it != c1.end(); ++it)
        std::cout << "[" << *it << "] ";
    std::cout << std::endl;

    // try to find and fail
    std::cout << "find('A') == "
        << std::boolalpha << (c1.find('A') != c1.end()) << std::endl;

    // try to find and succeed
    Myset::iterator it = c1.find('b');
    std::cout << "find('b') == "
        << std::boolalpha << (it != c1.end())
        << ": [" << *it << "] " << std::endl;

    return (0);
}
[c] [b] [a]
find('A') == false
find('b') == true: [b]

unordered_multiset::get_allocator

Hiermee haalt u het opgeslagen allocatorobject op.

Alloc get_allocator() const;

Opmerkingen

De lidfunctie retourneert het opgeslagen allocator-object.

Voorbeeld

// std__unordered_set__unordered_multiset_get_allocator.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>

typedef std::unordered_multiset<char> Myset;
typedef std::allocator<std::pair<const char, int> > Myalloc;
int main()
{
    Myset c1;

    Myset::allocator_type al = c1.get_allocator();
    std::cout << "al == std::allocator() is "
        << std::boolalpha << (al == Myalloc()) << std::endl;

    return (0);
}
al == std::allocator() is true

unordered_multiset::hash_function

Hiermee haalt u het opgeslagen hash-functieobject op.

Hash hash_function() const;

Opmerkingen

De lidfunctie retourneert het opgeslagen hash-functieobject.

Voorbeeld

// std__unordered_set__unordered_multiset_hash_function.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>

typedef std::unordered_multiset<char> Myset;
int main()
{
    Myset c1;

    Myset::hasher hfn = c1.hash_function();
    std::cout << "hfn('a') == " << hfn('a') << std::endl;
    std::cout << "hfn('b') == " << hfn('b') << std::endl;

    return (0);
}
hfn('a') == 1630279
hfn('b') == 1647086

unordered_multiset::hasher

Het type hash-functie.

typedef Hash hasher;

Opmerkingen

Het type is een synoniem voor de sjabloonparameter Hash.

Voorbeeld

// std__unordered_set__unordered_multiset_hasher.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>

typedef std::unordered_multiset<char> Myset;
int main()
{
    Myset c1;

    Myset::hasher hfn = c1.hash_function();
    std::cout << "hfn('a') == " << hfn('a') << std::endl;
    std::cout << "hfn('b') == " << hfn('b') << std::endl;

    return (0);
}
hfn('a') == 1630279
hfn('b') == 1647086

unordered_multiset::insert

Hiermee voegt u een element of een reeks elementen in een unordered_multiset in.

// (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);

Parameterwaarden

Val
De waarde van een element dat moet worden ingevoegd in de unordered_multiset.

Waar
De plaats om te beginnen met zoeken naar het juiste invoegpunt.

ValTy
Sjabloonparameter die het argumenttype aangeeft dat de unordered_multiset kan gebruiken om een element van value_type samen te stellen, en perfect-forwards Val als argument.

Eerste
De positie van het eerste element dat moet worden gekopieerd.

laatste
De positie net voorbij het laatste element dat moet worden gekopieerd.

InputIterator
Argument sjabloonfunctie die voldoet aan de vereisten van een invoer-iterator die verwijst naar elementen van een type dat kan worden gebruikt om value_type objecten te maken.

IList
De initializer_list waaruit u de elementen wilt kopiëren.

Retourwaarde

Met de functies voor lid met één element( 1) en (2) wordt een iterator geretourneerd naar de positie waar het nieuwe element in de unordered_multiset is ingevoegd.

De functies van het lid met één element(3) en (4) retourneren een iterator die verwijst naar de positie waar het nieuwe element is ingevoegd in de unordered_multiset.

Opmerkingen

Er worden geen verwijzingen of verwijzingen ongeldig gemaakt door deze functie, maar mogelijk worden alle iterators naar de container ongeldig gemaakt.

Als tijdens het invoegen van slechts één element een uitzondering wordt gegenereerd maar niet voorkomt in de hash-functie van de container, wordt de status van de container niet gewijzigd. Als de uitzondering wordt gegenereerd in de hash-functie, is het resultaat niet gedefinieerd. Als er tijdens het invoegen van meerdere elementen een uitzondering wordt gegenereerd, blijft de container een niet-opgegeven maar geldige status behouden.

De value_type van een container is een typedef die deel uitmaakt van de container en, voor set, unordered_multiset<V>::value_type is het type const V.

Met de functie bereiklid (5) wordt de reeks elementwaarden ingevoegd in een unordered_multiset die overeenkomt met elk element dat is geadresseerd door een iterator in het bereik [First, Last); Daarom wordt Last niet ingevoegd. De functie end() containerlid verwijst naar de positie vlak na het laatste element in de container, bijvoorbeeld de instructie m.insert(v.begin(), v.end()); voegt alle elementen van v in m.

De functie initialisatielijstlid (6) gebruikt een initializer_list om elementen naar de unordered_multiset te kopiëren.

Zie unordered_multiset::emplace en unordered_multiset::emplace_hint voor het invoegen van een element dat op zijn plaats is gemaakt, dat wil gezegd, geen kopieer- of verplaatsingsbewerkingen worden uitgevoerd.

Zie multiset::insert voor een codevoorbeeld.

unordered_multiset::iterator

Een type dat een constante doorstuur iterator biedt die elementen in een unordered_multiset kan lezen.

typedef implementation-defined iterator;

Voorbeeld

Zie het voorbeeld voor het begin van een voorbeeld van het declareren en gebruiken van een iterator.

unordered_multiset::key_eq

Hiermee haalt u het opgeslagen vergelijkingsfunctieobject op.

Pred key_eq() const;

Opmerkingen

De lidfunctie retourneert het opgeslagen vergelijkingsfunctieobject.

Voorbeeld

// std__unordered_set__unordered_multiset_key_eq.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>

typedef std::unordered_multiset<char> Myset;
int main()
{
    Myset c1;

    Myset::key_equal cmpfn = c1.key_eq();
    std::cout << "cmpfn('a', 'a') == "
        << std::boolalpha << cmpfn('a', 'a') << std::endl;
    std::cout << "cmpfn('a', 'b') == "
        << std::boolalpha << cmpfn('a', 'b') << std::endl;

    return (0);
}
cmpfn('a', 'a') == true
cmpfn('a', 'b') == false

unordered_multiset::key_equal

Het type vergelijkingsfunctie.

typedef Pred key_equal;

Opmerkingen

Het type is een synoniem voor de sjabloonparameter Pred.

Voorbeeld

// std__unordered_set__unordered_multiset_key_equal.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>

typedef std::unordered_multiset<char> Myset;
int main()
{
    Myset c1;

    Myset::key_equal cmpfn = c1.key_eq();
    std::cout << "cmpfn('a', 'a') == "
        << std::boolalpha << cmpfn('a', 'a') << std::endl;
    std::cout << "cmpfn('a', 'b') == "
        << std::boolalpha << cmpfn('a', 'b') << std::endl;

    return (0);
}
cmpfn('a', 'a') == true
cmpfn('a', 'b') == false

unordered_multiset::key_type

Het type bestelsleutel.

typedef Key key_type;

Opmerkingen

Het type is een synoniem voor de sjabloonparameter Key.

Voorbeeld

// std__unordered_set__unordered_multiset_key_type.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>

typedef std::unordered_multiset<char> Myset;
int main()
{
    Myset c1;

    c1.insert('a');
    c1.insert('b');
    c1.insert('c');

    // display contents "[c] [b] [a]"
    for (Myset::const_iterator it = c1.begin();
        it != c1.end(); ++it)
        std::cout << "[" << *it << "] ";
    std::cout << std::endl;

    // add a value and reinspect
    Myset::key_type key = 'd';
    Myset::value_type val = key;
    c1.insert(val);

    for (Myset::const_iterator it = c1.begin();
        it != c1.end(); ++it)
        std::cout << "[" << *it << "] ";
    std::cout << std::endl;

    return (0);
}
[c] [b] [a]
[d] [c] [b] [a]

unordered_multiset::load_factor

Telt de gemiddelde elementen per bucket.

float load_factor() const;

Opmerkingen

De lidfunctie retourneert (float)unordered_multiset::size() / (float)unordered_multiset::bucket_count(), het gemiddelde aantal elementen per bucket.

Voorbeeld

// std__unordered_set__unordered_multiset_load_factor.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>

typedef std::unordered_multiset<char> Myset;
int main()
{
    Myset c1;

    c1.insert('a');
    c1.insert('b');
    c1.insert('c');

    // display contents "[c] [b] [a]"
    for (Myset::const_iterator it = c1.begin();
        it != c1.end(); ++it)
        std::cout << "[" << *it << "] ";
    std::cout << std::endl;

    // inspect current parameters
    std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;
    std::cout << "load_factor() == " << c1.load_factor() << std::endl;
    std::cout << "max_bucket_count() == "
        << c1.max_bucket_count() << std::endl;
    std::cout << "max_load_factor() == "
        << c1.max_load_factor() << std::endl;
    std::cout << std::endl;

    // change max_load_factor and redisplay
    c1.max_load_factor(0.10f);
    std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;
    std::cout << "load_factor() == " << c1.load_factor() << std::endl;
    std::cout << "max_bucket_count() == "
        << c1.max_bucket_count() << std::endl;
    std::cout << "max_load_factor() == "
        << c1.max_load_factor() << std::endl;
    std::cout << std::endl;

    // rehash and redisplay
    c1.rehash(100);
    std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;
    std::cout << "load_factor() == " << c1.load_factor() << std::endl;
    std::cout << "max_bucket_count() == "
        << c1.max_bucket_count() << std::endl;
    std::cout << "max_load_factor() == "
        << c1.max_load_factor() << std::endl;
    std::cout << std::endl;

    return (0);
}

unordered_multiset::local_iterator

Het type bucket-iterator.

typedef T4 local_iterator;

Opmerkingen

Het type beschrijft een object dat kan fungeren als een doorstuurserver voor een bucket. Het wordt hier beschreven als synoniem voor het door de implementatie gedefinieerde type T4.

Voorbeeld

// std__unordered_set__unordered_multiset_local_iterator.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>

typedef std::unordered_multiset<char> Myset;
int main()
{
    Myset c1;

    c1.insert('a');
    c1.insert('b');
    c1.insert('c');

    // display contents "[c] [b] [a]"
    for (Myset::const_iterator it = c1.begin();
        it != c1.end(); ++it)
        std::cout << "[" << *it << "] ";
    std::cout << std::endl;

    // inspect bucket containing 'a'
    Myset::local_iterator lit = c1.begin(c1.bucket('a'));
    std::cout << "[" << *lit << "] ";

    return (0);
}
[c] [b] [a]
[a]

unordered_multiset::max_bucket_count

Hiermee haalt u het maximum aantal buckets op.

size_type max_bucket_count() const;

Opmerkingen

De lidfunctie retourneert het maximum aantal buckets dat momenteel is toegestaan.

Voorbeeld

// std__unordered_set__unordered_multiset_max_bucket_count.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>

typedef std::unordered_multiset<char> Myset;
int main()
{
    Myset c1;

    c1.insert('a');
    c1.insert('b');
    c1.insert('c');

    // display contents "[c] [b] [a]"
    for (Myset::const_iterator it = c1.begin();
        it != c1.end(); ++it)
        std::cout << "[" << *it << "] ";
    std::cout << std::endl;

    // inspect current parameters
    std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;
    std::cout << "load_factor() == " << c1.load_factor() << std::endl;
    std::cout << "max_bucket_count() == "
        << c1.max_bucket_count() << std::endl;
    std::cout << "max_load_factor() == "
        << c1.max_load_factor() << std::endl;
    std::cout << std::endl;

    // change max_load_factor and redisplay
    c1.max_load_factor(0.10f);
    std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;
    std::cout << "load_factor() == " << c1.load_factor() << std::endl;
    std::cout << "max_bucket_count() == "
        << c1.max_bucket_count() << std::endl;
    std::cout << "max_load_factor() == "
        << c1.max_load_factor() << std::endl;
    std::cout << std::endl;

    // rehash and redisplay
    c1.rehash(100);
    std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;
    std::cout << "load_factor() == " << c1.load_factor() << std::endl;
    std::cout << "max_bucket_count() == "
        << c1.max_bucket_count() << std::endl;
    std::cout << "max_load_factor() == "
        << c1.max_load_factor() << std::endl;
    std::cout << std::endl;

    return (0);
}
[c] [b] [a]
bucket_count() == 8
load_factor() == 0.375
max_bucket_count() == 8
max_load_factor() == 4

bucket_count() == 8
load_factor() == 0.375
max_bucket_count() == 8
max_load_factor() == 0.1

bucket_count() == 128
load_factor() == 0.0234375
max_bucket_count() == 128
max_load_factor() == 0.1

unordered_multiset::max_load_factor

Hiermee worden de maximumelementen per bucket opgehaald of ingesteld.

float max_load_factor() const;

void max_load_factor(float factor);

Parameterwaarden

factor
De nieuwe maximale belastingsfactor.

Opmerkingen

De eerste lidfunctie retourneert de opgeslagen maximale belastingsfactor. De tweede lidfunctie vervangt de opgeslagen maximale belastingsfactor door factor.

Voorbeeld

// std__unordered_set__unordered_multiset_max_load_factor.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>

typedef std::unordered_multiset<char> Myset;
int main()
{
    Myset c1;

    c1.insert('a');
    c1.insert('b');
    c1.insert('c');

    // display contents "[c] [b] [a]"
    for (Myset::const_iterator it = c1.begin();
        it != c1.end(); ++it)
        std::cout << "[" << *it << "] ";
    std::cout << std::endl;

    // inspect current parameters
    std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;
    std::cout << "load_factor() == " << c1.load_factor() << std::endl;
    std::cout << "max_bucket_count() == "
        << c1.max_bucket_count() << std::endl;
    std::cout << "max_load_factor() == "
        << c1.max_load_factor() << std::endl;
    std::cout << std::endl;

    // change max_load_factor and redisplay
    c1.max_load_factor(0.10f);
    std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;
    std::cout << "load_factor() == " << c1.load_factor() << std::endl;
    std::cout << "max_bucket_count() == "
        << c1.max_bucket_count() << std::endl;
    std::cout << "max_load_factor() == "
        << c1.max_load_factor() << std::endl;
    std::cout << std::endl;

    // rehash and redisplay
    c1.rehash(100);
    std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;
    std::cout << "load_factor() == " << c1.load_factor() << std::endl;
    std::cout << "max_bucket_count() == "
        << c1.max_bucket_count() << std::endl;
    std::cout << "max_load_factor() == "
        << c1.max_load_factor() << std::endl;
    std::cout << std::endl;

    return (0);
}
[c] [b] [a]
bucket_count() == 8
load_factor() == 0.375
max_bucket_count() == 8
max_load_factor() == 4

bucket_count() == 8
load_factor() == 0.375
max_bucket_count() == 8
max_load_factor() == 0.1

bucket_count() == 128
load_factor() == 0.0234375
max_bucket_count() == 128
max_load_factor() == 0.1

unordered_multiset::max_size

Hiermee haalt u de maximale grootte van de gecontroleerde reeks op.

size_type max_size() const;

Opmerkingen

De lidfunctie retourneert de lengte van de langste reeks die het object kan beheren.

Voorbeeld

// std__unordered_set__unordered_multiset_max_size.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>

typedef std::unordered_multiset<char> Myset;
int main()
{
    Myset c1;

    std::cout << "max_size() == " << c1.max_size() << std::endl;

    return (0);
}
max_size() == 4294967295

unordered_multiset::operator=

Kopieert een hash-tabel.

unordered_multiset& operator=(const unordered_multiset& right);

unordered_multiset& operator=(unordered_multiset&& right);

Parameterwaarden

rechts
De unordered_multiset worden gekopieerd naar de unordered_multiset.

Opmerkingen

Na het wissen van bestaande elementen in een unordered_multiset, kopieert operator= of verplaatst u de inhoud van rechts naar de unordered_multiset.

Voorbeeld

// unordered_multiset_operator_as.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>

int main( )
{
    using namespace std;
    unordered_multiset<int> v1, v2, v3;
    unordered_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;
}

unordered_multiset::p ointer

Het type aanwijzer naar een element.

typedef Alloc::pointer pointer;

Opmerkingen

Het type beschrijft een object dat kan fungeren als een aanwijzer naar een element van de gecontroleerde reeks.

Voorbeeld

// std__unordered_set__unordered_multiset_pointer.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>

typedef std::unordered_multiset<char> Myset;
int main()
{
    Myset c1;

    c1.insert('a');
    c1.insert('b');
    c1.insert('c');

    // display contents "[c] [b] [a]"
    for (Myset::iterator it = c1.begin();
        it != c1.end(); ++it)
        {
        Myset::key_type key = *it;
        Myset::pointer p = &key;
        std::cout << "[" << *p << "] ";
        }
    std::cout << std::endl;

    return (0);
}
[c] [b] [a]

unordered_multiset::reference

Het type verwijzing naar een element.

typedef Alloc::reference reference;

Opmerkingen

Het type beschrijft een object dat kan fungeren als een verwijzing naar een element van de gecontroleerde reeks.

Voorbeeld

// std__unordered_set__unordered_multiset_reference.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>

typedef std::unordered_multiset<char> Myset;
int main()
{
    Myset c1;

    c1.insert('a');
    c1.insert('b');
    c1.insert('c');

    // display contents "[c] [b] [a]"
    for (Myset::iterator it = c1.begin();
        it != c1.end(); ++it)
        {
        Myset::key_type key = *it;
        Myset::reference ref = key;
        std::cout << "[" << ref << "] ";
        }
    std::cout << std::endl;

    return (0);
}
[c] [b] [a]

unordered_multiset::rehash

Hiermee wordt de hash-tabel opnieuw opgebouwd.

void rehash(size_type nbuckets);

Parameterwaarden

nbuckets
Het aangevraagde aantal buckets.

Opmerkingen

Met de lidfunctie wordt het aantal buckets gewijzigd in ten minste nbuckets en wordt de hash-tabel zo nodig opnieuw opgebouwd.

Voorbeeld

// std__unordered_set__unordered_multiset_rehash.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>

typedef std::unordered_multiset<char> Myset;
int main()
{
    Myset c1;

    c1.insert('a');
    c1.insert('b');
    c1.insert('c');

    // display contents "[c] [b] [a]"
    for (Myset::const_iterator it = c1.begin();
        it != c1.end(); ++it)
        std::cout << "[" << *it << "] ";
    std::cout << std::endl;

    // inspect current parameters
    std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;
    std::cout << "load_factor() == " << c1.load_factor() << std::endl;
    std::cout << "max_load_factor() == " << c1.max_load_factor() << std::endl;
    std::cout << std::endl;

    // change max_load_factor and redisplay
    c1.max_load_factor(0.10f);
    std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;
    std::cout << "load_factor() == " << c1.load_factor() << std::endl;
    std::cout << "max_load_factor() == " << c1.max_load_factor() << std::endl;
    std::cout << std::endl;

    // rehash and redisplay
    c1.rehash(100);
    std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;
    std::cout << "load_factor() == " << c1.load_factor() << std::endl;
    std::cout << "max_load_factor() == " << c1.max_load_factor() << std::endl;

    return (0);
}
[c] [b] [a]
bucket_count() == 8
load_factor() == 0.375
max_load_factor() == 4

bucket_count() == 8
load_factor() == 0.375
max_load_factor() == 0.1

bucket_count() == 128
load_factor() == 0.0234375
max_load_factor() == 0.1

unordered_multiset::size

Telt het aantal elementen.

size_type size() const;

Opmerkingen

De lidfunctie retourneert de lengte van de gecontroleerde reeks.

Voorbeeld

// std__unordered_set__unordered_multiset_size.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>

typedef std::unordered_multiset<char> Myset;
int main()
{
    Myset c1;

    c1.insert('a');
    c1.insert('b');
    c1.insert('c');

    // display contents "[c] [b] [a]"
    for (Myset::const_iterator it = c1.begin();
        it != c1.end(); ++it)
        std::cout << "[" << *it << "] ";
    std::cout << std::endl;

    // clear the container and reinspect
    c1.clear();
    std::cout << "size == " << c1.size() << std::endl;
    std::cout << "empty() == " << std::boolalpha << c1.empty() << std::endl;
    std::cout << std::endl;

    c1.insert('d');
    c1.insert('e');

    // display contents "[e] [d]"
    for (Myset::const_iterator it = c1.begin();
        it != c1.end(); ++it)
        std::cout << "[" << *it << "] ";
    std::cout << std::endl;

    std::cout << "size == " << c1.size() << std::endl;
    std::cout << "empty() == " << std::boolalpha << c1.empty() << std::endl;

    return (0);
}
[c] [b] [a]
size == 0
empty() == true

[e] [d]
size == 2
empty() == false

unordered_multiset::size_type

Het type niet-ondertekende afstand tussen twee elementen.

typedef T2 size_type;

Opmerkingen

Het niet-ondertekende gehele getaltype beschrijft een object dat de lengte van een gecontroleerde reeks kan vertegenwoordigen. Het wordt hier beschreven als synoniem voor het door de implementatie gedefinieerde type T2.

Voorbeeld

// std__unordered_set__unordered_multiset_size_type.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>

typedef std::unordered_multiset<char> Myset;
int main()
{
    Myset c1;
    Myset::size_type sz = c1.size();

    std::cout << "size == " << sz << std::endl;

    return (0);
}
size == 0

unordered_multiset::wisselen

Hiermee wordt de inhoud van twee containers gewisseld.

void swap(unordered_multiset& right);

Parameterwaarden

rechts
De container waarmee moet worden gewisseld.

Opmerkingen

De lidfunctie wisselt de gecontroleerde reeksen tussen *this en rechter. Als unordered_multiset::get_allocator() == right.get_allocator() dit in constante tijd doet, genereert het een uitzondering alleen als gevolg van het kopiëren van het opgeslagen eigenschappenobject van het type Tr, en het ongeldig maakt geen verwijzingen, aanwijzers of iterators die elementen in de twee gecontroleerde reeksen aanwijzen. Anders worden een aantal elementtoewijzingen en constructor-aanroepen uitgevoerd die evenredig zijn met het aantal elementen in de twee gecontroleerde reeksen.

Voorbeeld

// std__unordered_set__unordered_multiset_swap.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>

typedef std::unordered_multiset<char> Myset;
int main()
{
    Myset c1;

    c1.insert('a');
    c1.insert('b');
    c1.insert('c');

    // display contents "[c] [b] [a]"
    for (Myset::const_iterator it = c1.begin();
        it != c1.end(); ++it)
        std::cout << "[" << *it << "] ";
    std::cout << std::endl;

    Myset c2;

    c2.insert('d');
    c2.insert('e');
    c2.insert('f');

    c1.swap(c2);

    // display contents "[f] [e] [d]"
    for (Myset::const_iterator it = c1.begin();
        it != c1.end(); ++it)
        std::cout << "[" << *it << "] ";
    std::cout << std::endl;

    swap(c1, c2);

    // display contents "[c] [b] [a]"
    for (Myset::const_iterator it = c1.begin();
        it != c1.end(); ++it)
        std::cout << "[" << *it << "] ";
    std::cout << std::endl;

    return (0);
}
[c] [b] [a]
[f] [e] [d]
[c] [b] [a]

unordered_multiset::unordered_multiset

Maakt een containerobject.

unordered_multiset(
    const unordered_multiset& Right);

explicit unordered_multiset(
    size_type Bucket_count = N0,
    const Hash& Hash = Hash(),
    const Comp& Comp = Comp(),
    const Allocator& Al = Alloc());

unordered_multiset(
    unordered_multiset&& Right);

unordered_set(
    initializer_list<Type> IList);

unordered_set(
    initializer_list<Typ> IList,
    size_type Bucket_count);

unordered_set(
    initializer_list<Type> IList,
    size_type Bucket_count,
    const Hash& Hash);

unordered_set(
    initializer_list<Type> IList,
    size_type Bucket_count,
    const Hash& Hash,
    const Key& Key);

unordered_set(
    initializer_list<Type> IList,
    size_type Bucket_count,
    const Hash& Hash,
    const Key& Key,
    const Allocator& Al);

template <class InputIterator>
unordered_multiset(
    InputIterator First,
    InputIterator Last,
    size_type Bucket_count = N0,
    const Hash& Hash = Hash(),
    const Comp& Comp = Comp(),
    const Allocator& Al = Alloc());

Parameterwaarden

InputIterator
Het type iterator.

Al
Het allocatorobject dat moet worden opgeslagen.

Comp
Het vergelijkingsfunctieobject dat moet worden opgeslagen.

Hekje
Het hash-functieobject dat moet worden opgeslagen.

Bucket_count
Het minimum aantal buckets.

Rechts
De container die moet worden gekopieerd.

IList
De initializer_list waaruit moet worden gekopieerd.

Opmerkingen

De eerste constructor geeft een kopie op van de reeks die wordt beheerd door Right. De tweede constructor geeft een lege gecontroleerde reeks aan. Met de derde constructor wordt de reeks elementwaarden [First, Last)ingevoegd. De vierde constructor geeft een kopie van de reeks op door naar rechts te gaan.

Alle constructors initialiseren ook verschillende opgeslagen waarden. Voor de kopieerconstructor worden de waarden opgehaald van Rechts. Anders:

Het minimum aantal buckets is het argument Bucket_count, indien aanwezig; anders is het een standaardwaarde die hier wordt beschreven als de door de implementatie gedefinieerde waarde N0.

Het hash-functieobject is het argument Hash, indien aanwezig; anders is Hash()het .

Het vergelijkingsfunctieobject is het argument Comp, indien aanwezig; anders is Comp()het .

Het allocatorobject is het argument Al, indien aanwezig; anders is Alloc()het .

unordered_multiset::value_type

Het type element.

typedef Key value_type;

Opmerkingen

Het type beschrijft een element van de gecontroleerde reeks.

Voorbeeld

// std__unordered_set__unordered_multiset_value_type.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>

typedef std::unordered_multiset<char> Myset;
int main()
{
    Myset c1;

    c1.insert('a');
    c1.insert('b');
    c1.insert('c');

    // display contents "[c] [b] [a]"
    for (Myset::const_iterator it = c1.begin();
        it != c1.end(); ++it)
        std::cout << "[" << *it << "] ";
    std::cout << std::endl;

    // add a value and reinspect
    Myset::key_type key = 'd';
    Myset::value_type val = key;
    c1.insert(val);

    for (Myset::const_iterator it = c1.begin();
        it != c1.end(); ++it)
        std::cout << "[" << *it << "] ";
    std::cout << std::endl;

    return (0);
}
[c] [b] [a]
[d] [c] [b] [a]

Zie ook

<unordered_set>
Containers
Thread Safety in de standaardbibliotheek van C++
Naslaginformatie over de C++ standaard bibliotheek