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 |
Tipo di un allocatore per gestire l'archiviazione. |
|
Tipo di un iteratore costante per la sequenza controllata. |
|
Tipo di un iteratore di bucket costante per la sequenza controllata. |
|
Tipo di un puntatore costante a un elemento. |
|
Tipo di un riferimento costante a un elemento. |
|
Tipo di una distanza Signed tra due elementi. |
|
Tipo della funzione hash. |
|
Tipo di un iteratore per la sequenza controllata. |
|
Tipo della funzione di confronto. |
|
Tipo di una chiave di ordinamento. |
|
Tipo di un iteratore di bucket per la sequenza controllata. |
|
Tipo di un valore mappato associato a ogni chiave. |
|
Tipo di un puntatore a un elemento. |
|
Tipo di un riferimento a un elemento. |
|
Tipo di una distanza Unsigned tra due elementi. |
|
Tipo di un elemento. |
Funzione membro |
Descrizione |
Indica l'inizio della sequenza controllata. |
|
Ottiene il numero di bucket relativo a un valore della chiave. |
|
Ottiene il numero di bucket. |
|
Ottiene le dimensioni di un bucket. |
|
Indica l'inizio della sequenza controllata. |
|
Indica la fine della sequenza controllata. |
|
Rimuove tutti gli elementi. |
|
Trova il numero di elementi corrispondenti a una chiave specificata. |
|
Aggiunge un elemento costruito sul posto. |
|
Aggiunge un elemento costruito sul posto, con il suggerimento. |
|
Verifica se sono presenti o meno degli elementi. |
|
Indica la fine della sequenza controllata. |
|
Trova un intervallo che corrisponde a una chiave specificata. |
|
Rimuove gli elementi in corrispondenza delle posizioni specificate. |
|
Trova un elemento che corrisponde a una chiave specificata. |
|
Ottiene l'oggetto allocatore archiviato. |
|
Ottiene l'oggetto della funzione hash archiviato. |
|
Aggiunge elementi. |
|
Ottiene l'oggetto archiviato della funzione di confronto. |
|
Conta il numero medio di elementi per bucket. |
|
Ottiene il numero massimo di bucket. |
|
Ottiene o imposta il numero massimo di elementi per bucket. |
|
Ottiene la dimensione massima della sequenza controllata. |
|
Ricompila la tabella hash. |
|
Conta il numero di elementi. |
|
Scambia il contenuto di due contenitori. |
|
Costruisce un oggetto contenitore. |
Operatore |
Descrizione |
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
Sicurezza dei thread nella libreria standard C++