PDA

Visualizza la versione completa : [c++ stl]Multimap


giuseppe500
06-11-2009, 16:46
Ciao.
Non sono riuscito a capire del tutto il multimap stl , ho capito che il multimap accetta piu' elementi anche con la stessa chiave ,ma di valore diverso (penso ,questo non mi è chiaro).
Vi spiego cosa vorrei fare:
Ho una lista di comandi testo ad es:'BEAM','POLY','SECTION' in un file txt una per linea con eventuali parametri per cui utilizzo una struttura opportuna i BEAM saranno in un multimap m_mapBEAM l POLY saranno in un multimap m_mapPOLY ecc...
Il problema è che posso avere piu' elementi con chiave e valore uguale e nel qual caso vorrei potere scorrere come in un array lo stesso elemento.
ad es:


#BEAM#ID=0#VALUE=1
#BEAM#ID=1#VALUE=2
#BEAM#ID=2#VALUE=3
#BEAM#ID=2#VALUE=3

vorrei poter fare cosi:
la chiaveè ID , il valore VALUE
int nbeam = m_mapBEAM[0]
nbeam = 1
int nbeam = m_mapBEAM[1]
nbeam = 2
int nbeam = m_mapBEAM[2]
nbeam = 3
int nbeam = m_mapBEAM[2]// l'elemento esiste gia ma lo posso leggere 2 volte perchè sono 2.


In pratica vorrei che per la stessa chiave possano esistere n elementi uguali accessibili con un indice.
grazie.

Stoicenko
06-11-2009, 19:45
un multimap è all'incirca un vettore di vettori.. come tale hai un primo indice che indica le chiavi e un secondo per indicare i valori (o valore)..

ciò che serve a te, secondo me è crearti una tua struttura contenente la coppia chiave-valore e inserirla in un'opportuna struttura lista (va bene vector per esempio)

se ho capito bene però tu vorresti accede all'insieme di valori uguali con un solo indice.. quindi ti conviene usare una struttura più complessa:

[id] -> [ struttura1, struttura2]
[id] -> [ struttura 1]
[id] -> [ struttura 1]
[id] -> [ struttura1, struttura2, struttura3]

in questo modo in pseudocodice:

vector[indice][pos_struttura] indicherà la tua struttura



int nbeam = m_mapBEAM[0][0] //ne hai solo 1
nbeam = 1
int nbeam = m_mapBEAM[1][0] //ne hai solo 1
nbeam = 2
int nbeam = m_mapBEAM[2][0] //ne hai 2 prendi il 1°
nbeam = 3
int nbeam = m_mapBEAM[2][1] //ne hai 2 prendi il 2°

Loading