Контейнеры STL: multimap. parte 8




класс multimap C ++, контейнеры STL, MultiMap per i principiantiAbbiamo considerato un semplice esempio di come usare la mappa<> per contare le occorrenze dei singoli caratteri nel testo. A questo scopo, abbiamo utilizzato un contenitore carta geografica<>. Ma il STL biblioteca noi e gli altri fornisce (vicino) tipo di contenitore - è multimap<>, che permette la presenza di molti elemento (coppia<>) nella sua composizione alla stesso valori chiave.

naturalmente, che le regole di base del funzionamento multimap<> cambiamento (rispetto carta geografica<>). Per un tale contenitore avrà le seguenti differenze nel comportamento di:

  • Esso contiene coppie ordinate <chiave,senso>, dove la chiave e il valore possono appartenere a tipi arbitrari;

  • Elementi con i valori chiave non deve essere unicome, nella sequenza ordinata di elementi (a chiave) tali elementi equivalenti sono, come diverso elementi, e sono disposti uno dopo l'altro;

  • Poiché le chiavi sono uguali, allora l'operazione di aggiunta di una nuova coppia nella tabella (metodo inserire()) sempre di successo. Non c'è bisogno di restituire il risultato di tale operazione: valore di ritorno - vuoto;

  • Poiché ora è nel contenitore può essere un sacco di elementi con chiavi uguali, ha introdotto un ulteriore metodo contare(). Si ottiene il valore del parametro chiave, restituisce il numero di occorrenze di elementi, avere una chiave, nel contenitore;

  • operazioni di rimozione (metodo cancellare()) con l'indicazione dell'elemento per rimuovere le eliminazioni chiave tutto in una volta elementi con la stessa chiave;

Vediamo come multimap<> far fronte con il compito precedente. Che i file di testo per programma di test:

30 Fratello e sorella 11 Humpty Dumpty- 34 Jabberwock

Come nell'esempio precedente, Esso utilizza diversi ingombrante per immettere i caratteri dal flusso, contenente il testo su più righe. Questo è, che e). Vorrei leggere e anche caratteri di spazio come simboli, piuttosto che come delimitatori e B). si può solo leggere i caratteri della serie gin seguita escludendo le interruzioni di linea. Ma nella realizzazione illustrata, sarebbe auspicabile per preservare l'indipendenza del sistema operativo (distinguere il cosiddetto avanzamento riga DOS e UNIX). Il resto del codice è diventata molto più breve e più facile.

risultato di, che abbiamo ottenuto, illustrato di seguito (accanto ripetuto per confrontare la stessa azione, eseguita carta geografica<>):

класс multimap C ++, контейнеры STL, MultiMap per i principianti
multimap
mappa класс C ++, контейнеры STL, map per i principianti
carta geografica

Richiamiamo l'attenzione sul fatto, come la rimozione di un solo operatore alphabet.erase( 'un’ ) abbiamo rimosso dalle tabelle 38 elemento, Identificare le chiavi 'un’. Dove ha fatto il formato dimensione() in 696 elemento?




класс multimap C ++, контейнеры STL, MultiMap per i principianti

(comando Show forma wc calcola il sistema operativo Linux il numero di righe file. Le uscite di comando ls lunghezza file, vale a dire. il numero di singoli byte, caratteri nel file. In Windows, si può provare a ottenere un risultato simile usando il comando dir.)

Se abbiamo il numero totale di simboli (lunghezza in byte) sottrarre il numero di linee (interruzioni di riga) file, allora otteniamo questa figura: 726 – 30 = 696. così, per ogni simbolo in ingresso è stata stabilita separato elemento di tabella, per esempio, chiave 'S’ era 39 tali elementi.

tutto, precedentemente detto a proposito контейнера mappa<> (salvo locali e algoritmo di campionamento) si applica pienamente a multimap<>, per esempio, requisiti di comparabilità e la chiave, come definire o ridefinire l'operazione di confronto.

Newsletter nuove lezioni sulla programmazione:

Контейнеры STL: multimap. parte 8
Vota questo articolo

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

L'indirizzo email non verrà pubblicato. i campi richiesti sono contrassegnati *