2011-11-19 10 views
10

È possibile utilizzare seguente sintassi:L'uso della lista all'interno mappa C++

std::map<int,std::list<int>> mAllData; 

Dove Key Value (int) sarà ID dei dati, e tali dati potrebbe avere più tipi così sono memorizzati tutti loro contro detto valore della chiave. Sto cercando di usarlo.

+0

"ha detto dati potrebbero avere tipi mulitple" ... è '' lista solo uno di quei tipi? O vuoi dire che vuoi avere un 'elenco' che memorizza istanze di tipi diversi da solo' int'? – Pablo

+0

Nessun dato avrà più istanze, quindi tutte le istanze che voglio memorizzare in un elenco rispetto al suo ID (che sarà il valore chiave) Per spiegarlo meglio prendi ad esempio come uno dei miei dati ha l'ID "10" questo valore sarà nella chiave di mAllData quindi questi dati di ID possono avere istanze di ID dire 10000,200000,40000 quindi voglio solo fare un elenco di queste istanze e tenerlo con il suo ID di dati. – user987316

+0

Non capisco la tua domanda né il tuo commento. Stai dicendo che vuoi un ID per avere più valori? O vuoi che un ID abbia più valori ciascuno con tipi diversi? – Marlon

risposta

23
std::map<int,std::list<int>> my_map; 
my_map[10].push_back(10000); 
my_map[10].push_back(20000); 
my_map[10].push_back(40000); 

il compilatore potrebbe non supportare le due parentesi angolari di chiusura che sono proprio accanto all'altro ancora, quindi potrebbe essere necessario std::map<int,std::list<int> > my_map.

Con C++ 11 my_map può essere inizializzato in modo più efficiente:

std::map<int,std::list<int>> my_map {{10, {10000,20000,40000}}}; 

Inoltre, se si desidera solo un modo per memorizzare più valori per tasto, è possibile utilizzare std :: multimap.

std::multimap<int,int> my_map; 
my_map.insert(std::make_pair(10,10000)); 
my_map.insert(std::make_pair(10,20000)); 

E in C++ 11 questo può essere scritto:

std::multimap<int,int> my_map {{10,10000},{10,20000}}; 
+0

Mi piace la tua risposta meglio, è più completa –

+4

Non posso credere di non sapere su 'std :: multimap' (beh, lo sapevo, non l'ho mai usato)! Di solito ho usato 'std :: map >'. Fantastico ... ora mi sento un hobbista inesperto. – Marlon

Problemi correlati