Classe set
Il set di classi del contenitore STL viene utilizzato per l'archiviazione e il recupero dei dati da una raccolta in cui i valori degli elementi contenuti sono univoci e vengono utilizzati come valori delle chiavi in base a cui i dati vengono automaticamente ordinati. Non è possibile modificare direttamente il valore di un elemento di un set. È invece necessario eliminare i valori precedenti e inserire gli elementi che presentano nuovi valori.
template <
class Key,
class Traits=less<Key>,
class Allocator=allocator<Key>
>
class set
Parametri
Key
Tipo di dati degli elementi da archiviare nel set.Traits
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 set. Questo argomento è facoltativo e 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 set e alla deallocazione della memoria. Questo argomento è facoltativo e il valore predefinito è allocator*<Key>.*
Note
Un set STL è:
Un contenitore associativo, che è un contenitore di dimensioni variabili che supporta il recupero efficiente dei valori degli elementi in base al valore di una chiave associata. È inoltre un contenitore associativo semplice, in quanto i valori dei relativi elementi corrispondono ai valori delle chiavi.
Reversibile, in quanto fornisce un iteratore bidirezionale 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.
Univoco nel senso che ogni elemento deve disporre di una chiave univoca. Poiché il set è anche un contenitore associativo semplice, anche i relativi elementi sono univoci.
Una set viene anche descritto come 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.
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 set deve essere il contenitore associativo da preferire quando le condizioni che consentono di associare i valori alle relative chiavi vengono soddisfatte dall'applicazione. Gli elementi di un set sono univoci e vengono utilizzati come chiavi di ordinamento degli stessi. Un modello relativo a questo tipo di struttura è ad esempio un elenco ordinato di parole in cui ogni parola deve essere presente una sola volta. Se sono state consentite più occorrenze delle parole, la struttura di contenitore appropriata è il multiset. Se i valori devono essere associati a un elenco di parole chiave univoche, una mappa rappresenta la struttura appropriata per contenere questi dati. Se invece le chiavi non sono univoche, è preferibile scegliere come contenitore un multimap.
Il set ordina la sequenza da esso controllata chiamando un oggetto funzione archiviato di tipo key_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.
L'iteratore fornito dalla classe del set è un iteratore bidirezionale, ma le funzioni membro della classe insert e set 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 proprio 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.
Costruttori
Costruisce un set vuoto o che rappresenta una copia totale o parziale di un altro set. |
Definizioni typedef
Tipo che rappresenta la classe allocator per l'oggetto del set. |
|
Tipo che fornisce un iteratore bidirezionale in grado di leggere un elemento const nel set. |
|
Tipo che fornisce un puntatore a un elemento const di un set. |
|
Tipo che fornisce un riferimento a un elemento const archiviato in un set per la lettura e l'esecuzione di operazioni const. |
|
Tipo che fornisce un iteratore bidirezionale in grado di leggere qualsiasi elemento const del set. |
|
Tipo Signed Integer che può essere utilizzato per rappresentare il numero di elementi di un set in un intervallo compreso tra gli elementi a cui puntano gli iteratori. |
|
Tipo che fornisce un iteratore bidirezionale in grado di leggere o modificare qualsiasi elemento di un set. |
|
Tipo che fornisce un oggetto funzione in grado di confrontare due chiavi di ordinamento per determinare l'ordine relativo di due elementi nel set. |
|
Tipo che descrive un oggetto archiviato come elemento di un set in virtù della sua funzione di chiave di ordinamento. |
|
Tipo che fornisce un puntatore a un elemento di un set. |
|
Tipo che fornisce un riferimento a un elemento archiviato in un set. |
|
Tipo che fornisce un iteratore bidirezionale in grado di leggere o modificare un elemento di un set invertito. |
|
Tipo Unsigned Integer in grado di rappresentare il numero di elementi di un set. |
|
Tipo che fornisce un oggetto funzione in grado di confrontare due elementi per determinarne l'ordine relativo nel set. |
|
Tipo che descrive un oggetto archiviato come elemento di un set in virtù della sua funzione di valore. |
Funzioni membro
Restituisce un iteratore che punta al primo elemento del set. |
|
Restituisce un iteratore const che punta al primo elemento del set. |
|
Restituisce un iteratore const che punta alla posizione successiva all'ultimo elemento di un set. |
|
Cancella tutti gli elementi di un set. |
|
Restituisce il numero di elementi di un set la cui chiave corrisponde a una chiave specificata dal 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 set. |
|
Inserisce un elemento costruito sul posto in un set, con un suggerimento sulla posizione. |
|
Verifica se un set è vuoto. |
|
Restituisce un iteratore che punta alla posizione successiva all'ultimo elemento di un set. |
|
Restituisce una coppia di iteratori rispettivamente al primo elemento di un set con una chiave maggiore di una chiave specificata e al primo elemento del set con una chiave uguale o maggiore di tale chiave. |
|
Rimuove un elemento o un intervallo di elementi in un set dalle posizioni specificate oppure rimuove gli elementi che corrispondono a una chiave specificata. |
|
Restituisce un iteratore che punta alla posizione di un elemento in un set che dispone di una chiave equivalente a una chiave specificata. |
|
Restituisce una copia dell'oggetto allocator utilizzato per costruire il set. |
|
Inserisce un elemento o un intervallo di elementi in un set. |
|
Recupera una copia dell'oggetto di confronto utilizzato per ordinare le chiavi di un set. |
|
Restituisce un iteratore al primo elemento di un set con una chiave uguale o maggiore di una chiave specificata. |
|
Restituisce la lunghezza massima del set. |
|
Restituisce un iteratore che punta al primo elemento di un set invertito. |
|
Restituisce un iteratore che punta alla posizione successiva all'ultimo elemento di un set invertito. |
|
Restituisce il numero di elementi nel set. |
|
Scambia gli elementi di due set. |
|
Restituisce un iteratore al primo elemento di un set con una chiave maggiore di una chiave specificata. |
|
Recupera una copia dell'oggetto di confronto utilizzato per ordinare i valori degli elementi di un set. |
Operatori
Sostituisce gli elementi di un set con una copia di un altro set. |
Requisiti
Intestazione: <set>
Spazio dei nomi: std
Vedere anche
Riferimenti
Sicurezza dei thread nella libreria standard C++