Condividi tramite


Classe unordered_multimap

La classe modello descrive un oggetto che controlla una sequenza di elementi di lunghezza diversa di tipo std::pair<const Key, Ty>. La sequenza viene ordinata in modo debole da una funzione hash, che esegue il partizionamento della sequenza in un set ordinato di sottosequenze denominate bucket. In ogni bucket una funzione di confronto determina se una coppia di elementi ha un ordinamento equivalente. In ogni elemento sono archiviati due oggetti, una chiave di ordinamento e un valore. La sequenza viene rappresentata in modo da consentire la ricerca, l'inserimento e la rimozione di un elemento arbitrario mediante una serie di operazioni che possono essere indipendenti dal numero di elementi della sequenza (tempo costante), almeno quando tutti i bucket sono più o meno lunghi uguali. Nella peggiore delle ipotesi, quando tutti gli elementi si trovano in un unico bucket, il numero di operazioni è proporzionale al numero di elementi della sequenza (tempo lineare). Inoltre, l'inserimento di un elemento non invalida gli iteratori e la rimozione di un elemento invalida solo gli iteratori che fanno riferimento all'elemento rimosso.

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

Parametri

Parametro

Descrizione

Key

Tipo di chiave.

Ty

Tipo mappato.

Hash

Tipo di oggetto della funzione hash.

Pred

Tipo di oggetto della funzione di confronto di uguaglianza.

Alloc

Classe Allocator.

Membri

Definizione dei tipi

Descrizione

unordered_multimap::allocator_type

Tipo di un allocatore per gestire l'archiviazione.

unordered_multimap::const_iterator

Tipo di un iteratore costante per la sequenza controllata.

unordered_multimap::const_local_iterator

Tipo di un iteratore di bucket costante per la sequenza controllata.

unordered_multimap::const_pointer

Tipo di un puntatore costante a un elemento.

unordered_multimap::const_reference

Tipo di un riferimento costante a un elemento.

unordered_multimap::difference_type

Tipo di una distanza Signed tra due elementi.

unordered_multimap::hasher

Tipo della funzione hash.

unordered_multimap::iterator

Tipo di un iteratore per la sequenza controllata.

unordered_multimap::key_equal

Tipo della funzione di confronto.

unordered_multimap::key_type

Tipo di una chiave di ordinamento.

unordered_multimap::local_iterator

Tipo di un iteratore di bucket per la sequenza controllata.

unordered_multimap::mapped_type

Tipo di un valore mappato associato a ogni chiave.

unordered_multimap::pointer

Tipo di un puntatore a un elemento.

unordered_multimap::reference

Tipo di un riferimento a un elemento.

unordered_multimap::size_type

Tipo di una distanza Unsigned tra due elementi.

unordered_multimap::value_type

Tipo di un elemento.

Funzione membro

Descrizione

unordered_multimap::begin

Indica l'inizio della sequenza controllata.

unordered_multimap::bucket

Ottiene il numero di bucket relativo a un valore della chiave.

unordered_multimap::bucket_count

Ottiene il numero di bucket.

unordered_multimap::bucket_size

Ottiene le dimensioni di un bucket.

unordered_multimap::cbegin

Indica l'inizio della sequenza controllata.

unordered_multimap::cend

Indica la fine della sequenza controllata.

unordered_multimap::clear

Rimuove tutti gli elementi.

unordered_multimap::count

Trova il numero di elementi corrispondenti a una chiave specificata.

unordered_multimap::emplace

Aggiunge un elemento costruito sul posto.

unordered_multimap::emplace_hint

Aggiunge un elemento costruito sul posto, con il suggerimento.

unordered_multimap::empty

Verifica se sono presenti o meno degli elementi.

unordered_multimap::end

Indica la fine della sequenza controllata.

unordered_multimap::equal_range

Trova un intervallo che corrisponde a una chiave specificata.

unordered_multimap::erase

Rimuove gli elementi in corrispondenza delle posizioni specificate.

unordered_multimap::find

Trova un elemento che corrisponde a una chiave specificata.

unordered_multimap::get_allocator

Ottiene l'oggetto allocatore archiviato.

unordered_multimap::hash_function

Ottiene l'oggetto della funzione hash archiviato.

unordered_multimap::insert

Aggiunge elementi.

unordered_multimap::key_eq

Ottiene l'oggetto archiviato della funzione di confronto.

unordered_multimap::load_factor

Conta il numero medio di elementi per bucket.

unordered_multimap::max_bucket_count

Ottiene il numero massimo di bucket.

unordered_multimap::max_load_factor

Ottiene o imposta il numero massimo di elementi per bucket.

unordered_multimap::max_size

Ottiene la dimensione massima della sequenza controllata.

unordered_multimap::rehash

Ricompila la tabella hash.

unordered_multimap::size

Conta il numero di elementi.

unordered_multimap::swap

Scambia il contenuto di due contenitori.

unordered_multimap::unordered_multimap

Costruisce un oggetto contenitore.

Operatore

Descrizione

unordered_multimap::operator=

Copia una tabella hash.

Note

L'oggetto ordina la sequenza da esso controllata chiamando due oggetti archiviati, un oggetto della funzione di confronto di tipo unordered_multimap::key_equal e un oggetto della funzione hash di tipo unordered_multimap::hasher. È possibile accedere al primo oggetto archiviato chiamando la funzione membro unordered_multimap::key_eq() ed è possibile accedere al secondo oggetto archiviato chiamando la funzione membro unordered_multimap::hash_function(). In particolare, per tutti i valori X e Y di tipo Key, la chiamata a key_eq()(X, Y) restituisce true solo se i valori dei due argomenti hanno un ordinamento equivalente; la chiamata a hash_function()(keyval) produce una distribuzione di valori di tipo size_t. A differenza della classe modello Classe unordered_map, un oggetto della classe modello unordered_multimap non garantisce che key_eq()(X, Y) sia sempre false per due elementi qualsiasi della sequenza controllata. Le chiavi non devono essere necessariamente univoche.

L'oggetto consente inoltre di archiviare un fattore di carico massimo che specifica il numero medio massimo di elementi per bucket desiderato. Se l'inserimento di un elemento comporta un superamento del fattore di carico massimo da parte di unordered_multimap::load_factor(), il contenitore aumenta il numero dei bucket e ricompila la tabella hash in base alle necessità.

L'ordine effettivo degli elementi nella sequenza controllata dipende dalla funzione hash, dalla funzione di confronto, dall'ordine di inserimento, dal fattore di carico massimo e dal numero corrente di bucket. Non è in genere possibile prevedere l'ordine degli elementi nella sequenza selezionata. Si può tuttavia avere sempre la certezza dell'adiacenza dei subset di elementi con un ordinamento equivalente nella sequenza controllata.

L'oggetto alloca e libera la memoria per la sequenza da esso controllata tramite un oggetto allocatore archiviato di tipo unordered_multimap::allocator_type. Tale oggetto allocatore deve avere la stessa interfaccia esterna di un oggetto della classe modello allocator. Si noti che l'oggetto allocatore archiviato non viene copiato dopo l'assegnazione dell'oggetto contenitore.

Requisiti

Intestazione: <unordered_map>

Spazio dei nomi: std

Vedere anche

Riferimenti

<unordered_map>

Sicurezza dei thread nella libreria standard C++

Libreria di modelli standard

Concetti

Contenitori