Контейнеры STL: set multiset и. parte 9




класс set и multinsieme C ++, контейнеры STL, multiset set per principiantiMolto spesso, in pratica, è necessario monitorare solo quelli appartenenti ad altre strutture o in un sottoinsieme. Tali collezioni in matematica classica si chiamano molti, a cui un particolare oggetto può essere di proprietà o, o no. E il STL fornisce questo tipo di contenitore, che si chiama - impostato<> (molti).

Ogni elemento contenitore impostato<> Esso contiene solo valore della chiave (non una coppia, per carta geografica<>), quindi questo tipo di contenitore è molto efficace all'attuazione controllo del funzionamento in un insieme di valori. Questo contenitore offre molti metodi comuni a confronto с mappa<>, anche se qui ci sono alcune qualità degenerato (e talvolta inutile):

  • operazione Incolla (metodo inserire()) il nuovo valore chiave per l'insieme dei rendimenti coppia tipo <iteratore, bool> (solo, per carta geografica<>). In questa coppia di secondo componente (secondo, tipo bool) punta al successo dell'operazione: se vero, il primo componente del valore di ritorno (primo) iteratore dà un nuovo elemento aggiunto. Ma è del tutto priva di significato valore di ritorno: se restituiti vero, il nuovo valore viene aggiunto correttamente al set, se restituiti falso, è già presente in precedenza impostata - in entrambi i casi, l'insieme stato finale sarà identico (Tuttavia, in pratica, il valore restituito inserire() di solito non controlla ... e molte persone non sanno, che vi è generalmente previsto per il valore di ritorno a tutti);

  • metodo viene attuato per il contenitore contare() (per multimap<>), ma, come valore chiave può essere presente nel set solo in una copia, metodo contare() può restituire solo 0, se questo valore è mancante, e 1 Quando è presente un valore.

  • metodo implementato per container trovato(), che restituisce iteratore membro, se il valore si trova, e il valore dell'iteratore fine() se il valore non è nel set.

Per dimostrare il precedente creerà un'applicazione, è N volte (parametro, definita nel comando di avvio dell'applicazione) ciclo genera un numero casuale in un intervallo fisso [0…lim] e lo mette nel set. comprensibilmente, che quando N aumenta più di lim (e inoltre a N molto più lim), ogni serie di numeri [0…lim] Esso genera un numero sempre maggiore di volte:

класс set и multinsieme C ++, контейнеры STL, multiset set per principianti
Nella tesi delle proprietà non è impostato il debug

класс set и multinsieme C ++, контейнеры STL, multiset set per principianti
Nella tesi delle proprietà è il debug 5
класс set и multinsieme C ++, контейнеры STL, multiset set per principianti
Nella tesi delle proprietà è il debug 100

Un altro tipo di contenitore è vicino multiset<>, consentendo a ciascun valore della chiave sia unica, e di essere nel set di un qualsiasi numero di volte. Questi due contenitori (impostato<> e multiset<>) così simili, che nella domanda sopra indicato, che andrà a sostituire tutti 2 linea (metodo contare() per multiset<> ritorna il numero di occorrenze I valori nel set):

Ma il comportamento dell'applicazione cambia radicalmente (per il confronto mostra i risultati di una serie di 2 applicazioni in condizioni identiche):

класс set и multinsieme C ++, контейнеры STL, multiset set per principianti

visibile, che i valori MultiSet 1, 2, 13, 17… no container, e il valore 18, per esempio, attualmente ci 5 tempo.

Newsletter nuove lezioni sulla programmazione:

data
pagina
Контейнеры STL: set multiset и. parte 9
valutazione
51stella1stella1stella1stella1stella
olio

Di olio

esperienze pratiche circa lo sviluppo del software 40 anni. Maestro globale Logic società di software internazionale. IBM Developer funziona autore permanente di pubblicazioni. redattore scientifico del computer casa editrice letteratura "Simbolo-Plus", San Pietroburgo.

Lascia un Commento

Inserire il codice nei tag: <pre class="lang:C ++ decodifica:true ">IL TUO CODICE</pre>