2009-04-08 19 views
17

Mam problem z iteracją w odwrotnej kolejności niż mapa w gcc C++. Kiedy używam odwrotnego iteratora, wydaje się, że nie mogę cokolwiek przydzielić - kompilator narzeka. Pracuję nad tym z niezręcznym kodem za pomocą iteratora, ale nie jest on zbyt elegancki. jakieś pomysły?Jak iterować w odwrotnej kolejności na mapie w C++

+0

To, czego nam nie powiedziałeś, to to, co chcesz robić. – tpdi

+0

Wygląda na to, że używasz odwrotnego iteratora, ale wciąż nazywasz początek i koniec zamiast rbegin i rend. Rozwiązanie GMana może być tym, czego szukasz. Ale umieszczenie kodu pomoże nam pomóc. – Smashery

+0

Dzięki - Myślałem, że próbowałem rbegin/rend, ale musiałem się jakoś zaplątać. –

Odpowiedz

36

Oto przykład z iteracji tyłu przez std::map:

#include <iostream> 
#include <map> 
#include <string> 

int main() { 
    std::map<std::string, std::string> m; 
    m["a"] = "1"; 
    m["b"] = "2"; 
    m["c"] = "3"; 

    for (auto iter = m.rbegin(); iter != m.rend(); ++iter) { 
     std::cout << iter->first << ": " << iter->second << std::endl; 
    } 
} 

Jeśli pre-C, to po prostu trzeba ++ 11 do przeliterować auto, który jest:

std::map<std::string, std::string>::reverse_iterator 

Należy pamiętać, że w przypadku stosowania doładowania można użyć pętli for opartej na odległości z adapterem odwrotnym:

#include <boost/range/adaptor/reversed.hpp> 

for (auto& iter : boost::adaptors::reverse(m)) { 
    std::cout << iter.first << ": " << iter.second << std::endl; 
} 
+0

nazwa pliku nie jest wymagana. –

+0

Ups, pisałem ostatnio wiele szablonów, usunąłem je, dziękuję. : X – GManNickG

+1

czy można tutaj użyć 'auto'? – Chani

Powiązane problemy