Wyświetlanie kluczy w mapie

0

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...

1

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/

0

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

1

powinno być tak:

typedef std::map<std::string, std::string>::iterator MapIterator;
1

C++11 powah:

for (const auto &kv : mapa) {
  cout << kv.first << " " << kv.second << endl;
}
0

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

1
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.

0

Why? Więc jestem skazany na własną implementację jakiegoś algorytmu?

1

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ąć.

0

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?

0

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.

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