2011-11-19 13 views
10

Czy mogę używać następujących składni:Korzystanie z listy wewnątrz Mapa C++

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

Gdzie Key Value (int) będzie identyfikator danych i wspomnianych danych może mieć wiele typów tak przechowywania wszystkich ich przeciwko wspomnianej wartości klucza. Próbuję go użyć.

+0

"wspomnianych danych może mieć mulitple typy" ... jest '' lista tylko jeden z tych typów? Czy masz na myśli, że chcesz mieć 'list', która przechowuje instancje typów innych niż tylko' int'? – Pablo

+0

Żadne dane nie będą miały wielu wystąpień, więc wszystkie te instancje, które chcę zapisać na liście na podstawie ich identyfikatora (który będzie wartością kluczową) Aby objaśnić więcej, na przykład jako jeden z moich danych ma ID "10" ta wartość jest umieszczona w kluczu z mAllData, to te dane ID mogą mieć instancje ID powiedzmy 10000,200000,40000, więc chcę tylko utworzyć listę tych instancji i zachować ją z identyfikatorem danych. – user987316

+0

Nie bardzo rozumiem twoje pytanie, ani twój komentarz. Czy chcesz, aby identyfikator miał wiele wartości? Czy chcesz, aby identyfikator miał wiele wartości, z których każda ma różne typy? – Marlon

Odpowiedz

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); 

Twój kompilator nie może obsługiwać dwa kątowniki zamykające jest tuż obok siebie jeszcze, więc może trzeba std::map<int,std::list<int> > my_map.

z C++ 11 my_map można zainicjować bardziej efektywnie:

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

Ponadto, jeśli chcesz po prostu sposób, aby przechowywać wiele wartości na klucz, można użyć std :: multimap.

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

A w C++ 11 może to być napisane:

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

Podoba mi się twoja odpowiedź lepiej, jest bardziej kompletna –

+4

Nie mogę uwierzyć, że nie wiedziałem o 'std :: multimap' (dobrze wiedziałem o tym, po prostu nigdy go nie użyłem)! Zwykle używałem 'std :: map >'. Wspaniale ... teraz czuję się jak niedoświadczony hobbysta. – Marlon