Witam, mam taką prostą mapę
map <string, string> cos;
cos["A"] = "asda";
cos["B"] = "fdgdg";
i chcialbym wyłuskać nazwy kluczy A i B. W php trzeba zrobić foreach a w C++? Kombinowałem z iteratorami ale nie bardzo to ogarniam...
Witam, mam taką prostą mapę
map <string, string> cos;
cos["A"] = "asda";
cos["B"] = "fdgdg";
i chcialbym wyłuskać nazwy kluczy A i B. W php trzeba zrobić foreach a w C++? Kombinowałem z iteratorami ale nie bardzo to ogarniam...
google: std::iterator
//edit. albo dobra, masz:
map <string, string> cos;
cos["A"] = "asda";
cos["B"] = "fdgdg";
typedef std::map<std::string, std::string> MapIterator ;
for(MapIterator it=cos.begin(); it!=cos.end(); ++it)
{
std::cout<<it->first<<": "<<it->second<<std::endl;
}
nie kompilowałem, powinno działać
//edit 2.
pewnie spytasz: dlaczego tak?
it jest typu std::iterator, z przedefiniowanym operatorem dereferencji, który zwraca std::pair. a pair, co powinieneś wiedzieć, ma pola first i second. tyle. proste :)
http://www.cplusplus.com/reference/stl/map/begin/
Dziękuję no i z takim kodem można się uczyć. Tylko jest jeden problem - nie działa, tzn nie kompiluje się. Kodu błędu nie będę wrzucał bo ma z 666 linijek, coś z konwersją.
edit// sadze ze tak nie wolno sobie typedefa ze spacjami definiowac ale ja tu tylko sprzatam
powinno być tak:
typedef std::map<std::string, std::string>::iterator MapIterator;
C++11 powah:
for (const auto &kv : mapa) {
cout << kv.first << " " << kv.second << endl;
}
Dziękuję wam bardzo - teraz śmiga. Jeszcze zanim dostaniecie pochwalne "Pomógł" ostatnia mała rzecz. Mianowicie sortowanie takiej mapy. Dlaczego nie można tego zrobić w ten sposób (tak tak - wywala 666 błędów)
sort(Count_result.begin(), Count_result.end());
Count_result jest mapą <string, int> i chcę sortować po tych intach.
Sort jest funkcją z biblioteki algorithm
map <string, string> cos;
cos["A"] = "asda";
cos["B"] = "fdgdg";
map<string,string>::iterator it;
for(it=cos.begin(); it!=cos.end(); ++it)
{
cout << it->first << ": " << it->second << endl;
}
Mianowicie sortowanie takiej mapy.
Mapy się nie sortuje.
Why? Więc jestem skazany na własną implementację jakiegoś algorytmu?
Nawet jeżeli się DA posortować (nie sprawdzałem), to nie do tego mapa z założenia służy. Powiedz, co chcesz osiągnąć.
Mam słowa w tej mapie mianowicie [slowo]=>[ile_razy_wystapilo_w_tekscie] no i chce posortowac tak aby wysiwetlilo najczesciej wystepujace malejaco. WIem ze to moze glupi byl pomysl ale zabawa z kilkoma tablicami/wektorami to śmierć a jeszcze sprawdzanie czy takie slowo isnieje w tablicy, czy nie, a w mapie nie ma tych problemow. Jesli nie do takich rzeczy mapa sluzy to czym rozni sie od takiego wektora?
Przepisz pary z mapy do std::vector
, napisz odpowiedni funktor porównujący, posortuj, wypisz, wywal vector
.
Albo: napisz ten sam funktor, przepisz pary do std::set
, wyświetl, wywal set
.