Classe multiset
La classe multiset della libreria di modelli standard viene utilizzata per l'archiviazione e il recupero dei dati da una raccolta in cui i valori degli elementi contenuti non devono essere necessariamente univoci e in cui vengono utilizzati come valori delle chiavi in base a cui i dati vengono automaticamente ordinati. Non è possibile modificare direttamente il valore della chiave di un elemento di un multiset. È invece necessario eliminare i valori precedenti e inserire gli elementi che presentano nuovi valori.
template <
class Key,
class Compare=less<Key>,
class Allocator=allocator<Key>
>
class multiset
Parametri
Chiave
Tipo di dati degli elementi da archiviare nel multiset.Confronto
Tipo che fornisce un oggetto funzione in grado di confrontare i valori di due elementi come chiavi di ordinamento per determinarne l'ordine relativo nel multiset. Il predicato binario less<Key> rappresenta il valore predefinito.Allocator
Tipo che rappresenta l'oggetto allocatore archiviato che incapsula i dettagli relativi all'allocazione del multiset e alla deallocazione della memoria. Il valore predefinito è allocator*<Key>.*
Note
La classe multiset STL è:
Un contenitore associativo, che è un contenitore di dimensioni variabili che supporta il recupero efficiente dei valori degli elementi in base a un valore della chiave associata.
Reversibile, in quanto fornisce iteratori bidirezionali per accedere ai relativi elementi.
Ordinato, poiché i relativi elementi sono ordinati in base ai valori delle chiavi all'interno del contenitore conformemente a una funzione di confronto specificata.
Multiplo, in quanto i relativi elementi non devono necessariamente avere chiavi univoche, in modo tale che a un valore di una chiave possano essere associati i valori di più elementi.
Un contenitore associativo semplice, in quanto i valori dei relativi elementi corrispondono ai valori delle chiavi.
Una classe modello, poiché la funzionalità che fornisce è generica e completamente indipendente dal tipo specifico di dati contenuti come elementi. I tipi di dati da utilizzare sono invece specificati come parametro nel modello di classe insieme alla funzione di confronto e all'allocatore.
Un iteratore fornito dalla classe multiset è un iteratore bidirezionale, ma le funzioni membro della classe insert e multiset hanno versioni che accettano come parametri di modello un iteratore di input più debole, in cui i requisiti delle funzionalità sono inferiori a quelli garantiti dalla classe degli iteratori bidirezionali. I diversi concetti di iteratore formano una famiglia correlata dai perfezionamenti delle relative funzionalità. Ogni concetto di iteratore dispone di un set di requisiti e gli algoritmi utilizzati con tali concetti devono limitare le proprie ipotesi ai requisiti forniti da tale tipo di iteratore. Si può presupporre che un iteratore di input possa essere dereferenziato per fare riferimento a un determinato oggetto e possa essere incrementato all'iteratore successivo nella sequenza. Si tratta di un set di funzionalità minimo, ma è sufficiente per poter descrivere chiaramente un intervallo di iteratori [First, Last) nel contesto delle funzioni membro della classe.
La scelta del tipo di contenitore deve essere basata in genere sul tipo di ricerca e di inserimento richiesti dall'applicazione. I contenitori associativi sono ottimizzati per le operazioni di ricerca, inserimento e rimozione. Le funzioni membro che supportano in modo esplicito queste operazioni sono efficienti, eseguendo tali operazioni in un lasso di tempo mediamente proporzionale al logaritmo del numero di elementi presenti nel contenitore. L'inserimento di elementi non invalida gli iteratori e la rimozione di tali elementi invalida solo gli iteratori che avevano puntato in modo specifico agli elementi rimossi.
Il multiset deve essere il contenitore associativo da preferire quando le condizioni che consentono di associare i valori alle relative chiavi vengono soddisfatte dall'applicazione. Un multiset può contenere più elementi che possono essere utilizzati come chiavi di ordinamento, pertanto le chiavi non sono univoche. Un modello relativo a questo tipo di struttura è ad esempio un elenco ordinato di parole in cui tali parole possono essere presenti più volte. Se non sono consentite più occorrenze delle parole, la struttura di contenitore appropriata è rappresentata da un set. Se le definizioni univoche sono state allegate come valori all'elenco di parole chiave univoche, una mappa rappresenta una struttura appropriata per contenere questi dati. Se invece le definizioni non sono univoche, è opportuno scegliere come contenitore un multimap.
Il multiset ordina la sequenza da esso controllata chiamando un oggetto funzione archiviato di tipo Compare. Questo oggetto archiviato è una funzione di confronto a cui è possibile accedere chiamando la funzione membro key_comp. In genere, gli elementi devono essere confrontabili come "minore di" per stabilire questo ordine: in modo che, dati qualsiasi due elementi, sia possibile determinare che sono equivalenti (ovvero che uno non è minore dell'altro) o che uno è minore dell'altro. Di conseguenza, l'ordinamento viene eseguito tra gli elementi non equivalenti. A un livello più tecnico, la funzione di confronto è un predicato binario che provoca un ordinamento di tipo "strict weak" nel senso matematico standard. Un predicato binario f(x,y) è un oggetto funzione che dispone di due oggetti argomento x e y e di un valore restituito true o false. Un ordinamento imposto a un set è un ordinamento di tipo "strict weak" se il predicato binario è irriflessivo, antisimmetrico e transitivo e se l'equivalenza è transitiva, in cui due oggetti x e y vengono definiti equivalenti quando sia f(x,y) che f(y,x) sono false. Se la condizione di uguaglianza più forte tra le chiavi sostituisce quella di equivalenza, l'ordinamento diventa totale, in quanto tutti gli elementi vengono ordinati l'uno rispetto all'altro e le chiavi accoppiate saranno indistinguibili l'una dall'altra.
Costruttori
Costruisce un multiset vuoto o che rappresenta una copia totale o parziale di un multiset specificato. |
Definizioni typedef
typedef per la classe allocator dell'oggetto multiset. |
|
typedef per un iteratore bidirezionale in grado di leggere un elemento const nel multiset. |
|
typedef per un puntatore a un elemento const di un multiset. |
|
typedef per un riferimento a un elemento const archiviato in un multiset per la lettura e l'esecuzione di operazioni const. |
|
typedef per un iteratore bidirezionale in grado di leggere qualsiasi elemento const nel multiset. |
|
typedef Signed Integer per il numero di elementi di un multiset in un intervallo compreso tra gli elementi a cui puntano gli iteratori. |
|
typedef per un iteratore bidirezionale in grado di leggere o di modificare qualsiasi elemento di un multiset. |
|
typedef per un oggetto funzione in grado di confrontare due chiavi per determinare l'ordine relativo di due elementi nel multiset. |
|
typedef per un oggetto funzione in grado di confrontare due chiavi di ordinamento per determinare l'ordine relativo di due elementi nel multiset. |
|
typedef per un puntatore a un elemento di un multiset. |
|
typedef per un riferimento a un elemento archiviato in un multiset. |
|
typedef per un iteratore bidirezionale in grado di leggere o di modificare un elemento di un multiset invertito. |
|
Tipo Unsigned Integer in grado di rappresentare il numero di elementi di un multiset. |
|
typedef per un oggetto funzione in grado di confrontare due elementi come chiavi di ordinamento per determinarne l'ordine relativo nel multiset. |
|
typedef che descrive un oggetto archiviato come elemento di un multiset in virtù della sua funzione di valore. |
Funzioni membro
Restituisce un iteratore che punta al primo elemento del multiset. |
|
Restituisce un iteratore const che punta al primo elemento del multiset. |
|
Restituisce un iteratore const che punta alla posizione successiva all'ultimo elemento di un multiset. |
|
Cancella tutti gli elementi di un multiset. |
|
Restituisce il numero di elementi di un multiset la cui chiave corrisponde alla chiave specificata come parametro. |
|
Restituisce un iteratore const che punta al primo elemento di un set invertito. |
|
Restituisce un iteratore const che punta alla posizione successiva all'ultimo elemento di un set invertito. |
|
Inserisce un elemento costruito sul posto in un multiset. |
|
Inserisce un elemento costruito sul posto in un multiset, con un suggerimento sulla posizione. |
|
Verifica se un multiset è vuoto. |
|
Restituisce un iteratore che punta alla posizione successiva all'ultimo elemento di un multiset. |
|
Restituisce una coppia di iteratori. Il primo iteratore della coppia fa riferimento al primo elemento di un multiset con una chiave maggiore di una chiave specificata. Il secondo iteratore della coppia fa riferimento al primo elemento del multiset con una chiave uguale o maggiore della chiave specificata. |
|
Rimuove un elemento o un intervallo di elementi di un multiset dalle posizioni specificate oppure rimuove gli elementi che corrispondono a una chiave specificata. |
|
Restituisce un iteratore che punta alla prima posizione di un elemento di un multiset con una chiave uguale a una chiave specificata. |
|
Restituisce una copia dell'oggetto allocator utilizzato per costruire il multiset. |
|
Inserisce un elemento o un intervallo di elementi in un multiset. |
|
Fornisce un oggetto funzione in grado di confrontare due chiavi di ordinamento per determinare l'ordine relativo di due elementi nel multiset. |
|
Restituisce un iteratore al primo elemento di un multiset con una chiave uguale o maggiore di una chiave specificata. |
|
Restituisce la lunghezza massima del multiset. |
|
Restituisce un iteratore che punta al primo elemento di un multiset invertito. |
|
Restituisce un iteratore che punta alla posizione successiva all'ultimo elemento di un multiset invertito. |
|
Restituisce il numero di elementi di un multiset. |
|
Scambia gli elementi di due multiset. |
|
Restituisce un iteratore al primo elemento di un multiset con una chiave maggiore di una chiave specificata. |
|
Recupera una copia dell'oggetto di confronto utilizzato per ordinare i valori degli elementi di un multiset. |
Operatori
Sostituisce gli elementi di un multiset con una copia di un altro multiset. |
Requisiti
Intestazione: <set>
Spazio dei nomi: std
Vedere anche
Riferimenti
Sicurezza dei thread nella libreria standard C++