Inteligentny iterator

0

Zrobiłem programik, który produkuje 6-elementowe kombinacje z 10 elementów typu string (razem 210 sztuk, po 6 w każdej). Tym poszczególnym stringom przypisane są wektory po 30 elementów. Chciałbym teraz każdą 6-elementową kombinację wypełnić wartościami z tych wektorów. Zastosowałem pojemnik mapa, w którym kluczem jest string, a wartością poszukiwaną wektor 30-elementowy.
Jaki teraz mam zastosować iterator, aby kompilator grzecznie wpisał wartości z odpowiednich wektorów do kolejnych kombinacji stringów?
Ten iterator, którego używam wrzuca mi do każdej kombinacji całą mapę, czyli wszystkich 10 wektorów po 30 elementów. Oto fragment kodu:

vector<int>via11(ia11,ia11+30);
vector<int>via34(ia34,ia34+30);
vector<int>via72(ia72,ia72+30);
vector<int>via167(ia167,ia167+30);
vector<int>via190(ia190,ia190+30);
vector<int>via21(ia21,ia21+30);
vector<int>via64(ia64,ia64+30);
vector<int>via102(ia102,ia102+30);
vector<int>via178(ia178,ia178+30);
vector<int>via180(ia180,ia180+30);

    typedef map<string,vector<int> >pojemnik;
pojemnik::iterator it;
pojemnik map;                                                                

map.insert(make_pair("ia11", via11));
map.insert(make_pair("ia34", via34));
map.insert(make_pair("ia72", via72));
map.insert(make_pair("ia167", via167));
map.insert(make_pair("ia190", via190));
map.insert(make_pair("ia21", via21));
map.insert(make_pair("ia64", via64));
map.insert(make_pair("ia102", via102));
map.insert(make_pair("ia178", via178));
map.insert(make_pair("ia180", via180));                                           

for (it = map.begin();it!= map.end();++it)
std::copy(it->second.begin(),it->second.end(),// o ten fragment mi chodzi!!!
std::ostream_iterator<int>(std::cout,",")); // i tu też azor jest pogrzebany
std::cout<<std::endl;

Na moje oko to jest iterator kopiujący, ale całkiem bezmyślnie, jak leci. Co zrobić,żeby maszyna zaczęła myśleć ? Tylko mi nie odpowiadajcie, że mam sam zacząć myśleć - jestem leniwy, piwo chłodne, a dziewczyny gorące ! Pijąc Wasze zdrowie proszę o podpowiedź, albo jakiegoś gotowca. Wiem, że muszę się jeszcze dokształcić w iteratorach, ale lektura po angielsku idzie mi dość opornie. Pozdro!

0

nie bardzo rozumiem o co Ci chodzi.. ostatnia petla oznaczona przez Ciebie odwiedza kazdy element mapy [czyli kazdy wektor], i dla kazdego odwiedzonego wektora zrzuca jego zawartosc na strumien std::cout

innymi slowy, zalaczony fragment, wywala JEDEN RAZ zawartosc wszystkich WEKTOROW. nie wiem gdzie tutaj widzisz jakies "wrzucanie liczb do kombinacji stringow", ktore to stwierdzenie zreszta nic kompletnie mi nie mowi :)

jesli chciales wyrzucic na cout'a zawartosc tylko jednego wektora, wywal petle for i zamiast niej ustaw sobie IT na jakis arbitralnie wybrany element mapy.

jesli chciales wyrzucic na cout'a jakies pojedyncze elementy z kazdego kolejno odwiedzanego wektora, to albo nie uzywaj copy tylko po prostu zrob to recznie [liczbe elementow w wektorach znasz.. mozesz wiec to teoretycznie nawet s'hardcode'owac], albo nie podawaj do copy begin/end z second [bo to oznacza calosc zawartosci wektora] tylko iteratory przefiltrowane i ograniczone tylko do tych elementow ktore Cie interesuja..

1 użytkowników online, w tym zalogowanych: 0, gości: 1