sortowanie std::map<char,int> nie działa,ale dlaczego?

0

Heja

Mam mapę:

map<char,int> letters;

którą chciałbym mieć posortowaną po wartościach.Znalazłem temat na naszym forum że powinno to być załatwiane już przy wstawianiu itemów:
http://4programmers.net/Forum/C_i_C++/180678-stdmap_-_sortowanie_po_nazwie?hl=Sortowanie%20std::map
niestety,jak praktyka pokazuje nie jest.[EDIT: chyba,że to posortowanie jest po kluczu,to widzę by się zgadzało.Niestety,ja chcę mieć mapę posortowaną wg wartości]Wobec tego chciałem użyć std::sorta.Znalazłem co trzeba:
http://www.cplusplus.com/reference/algorithm/sort/
zapodałem kod:

sort(letters.begin(),letters.end());

a tu DUPA,dostaję pierdyliard errorów o_O w stylu poniżej.O czym zapomniałem/nie napisano w dokumentacji,że mój kod nie działa?

C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\algorithm(1795) : error C2784: 'reverse_iterator<_RanIt>::difference_type std::operator -(const std::reverse_iterator<_RanIt> &,const std::reverse_iterator<_RanIt> &)' : could not deduce template argument for 'const std::reverse_iterator<_RanIt> &' from 'std::_Tree<_Traits>::iterator'
        with
        [
            _Traits=std::_Tmap_traits<char,int,std::less<char>,std::allocator<std::pair<const char,int>>,false>
        ]
        C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\xutility(634) : see declaration of 'std::operator`-''
        main.cpp(148) : see reference to function template instantiation 'void std::sort<std::_Tree<_Traits>::iterator>(_RanIt,_RanIt)' being compiled
        with
        [
            _Traits=std::_Tmap_traits<char,int,std::less<char>,std::allocator<std::pair<const char,int>>,false>,
            _RanIt=std::_Tree<std::_Tmap_traits<char,int,std::less<char>,std::allocator<std::pair<const char,int>>,false>>::iterator
        ]
C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\algorithm(1795) : error C2784: 'reverse_iterator<_RanIt>::difference_type std::operator -(const std::reverse_iterator<_RanIt> &,const std::reverse_iterator<_RanIt> &)' : could not deduce template argument for 'const std::reverse_iterator<_RanIt> &' from 'std::_Tree<_Traits>::iterator'
        with
        [
            _Traits=std::_Tmap_traits<char,int,std::less<char>,std::allocator<std::pair<const char,int>>,false>
        ]
        C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\xutility(634) : see declaration of 'std::operator`-''
C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\algorithm(1795) : error C2784: 'reverse_iterator<_RanIt>::difference_type std::operator -(const std::reverse_iterator<_RanIt> &,const std::reverse_iterator<_RanIt> &)' : could not deduce template argument for 'const std::reverse_iterator<_RanIt> &' from 'std::_Tree<_Traits>::iterator'
        with
        [
            _Traits=std::_Tmap_traits<char,int,std::less<char>,std::allocator<std::pair<const char,int>>,false>
        ]
        C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\xutility(634) : see declaration of 'std::operator`-''
C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\algorithm(1795) : error C2784: 'reverse_iterator<_RanIt>::difference_type std::operator -(const std::reverse_iterator<_RanIt> &,const std::reverse_iterator<_RanIt> &)' : could not deduce template argument for 'const std::reverse_iterator<_RanIt> &' from 'std::_Tree<_Traits>::iterator'
        with
        [
            _Traits=std::_Tmap_traits<char,int,std::less<char>,std::allocator<std::pair<const char,int>>,false>
        ]
        C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\xutility(634) : see declaration of 'std::operator`-''
C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\algorithm(1795) : error C2676: binary '-' : 'std::_Tree<_Traits>::iterator' does not define this operator or a conversion to a type acceptable to the predefined operator
        with
        [
            _Traits=std::_Tmap_traits<char,int,std::less<char>,std::allocator<std::pair<const char,int>>,false>
        ]
C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\algorithm(1795) : error C2780: 'void std::_Sort(_RanIt,_RanIt,_Diff,_Pr)' : expects 4 arguments - 3 provided
        C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\algorithm(1913) : see declaration of 'std::_Sort'
0

Zapomniałeś jak zwykle tego o czym zwykle się zapomina - podać kodu którego używasz do budowania mapy...

Mapa się sortuje sama. Jeśli u Ciebie jest inaczej to:
a) VS 2003 było robione przez Hindusów
b) (bardziej prawdopodobne) coś źle robisz - ale bez kodu trudno powiedzieć co... - iterowanie, wstawianie, deklaracja?

1

Wczytałem się w ten wpis - nie posortujesz mapy inaczej niż po kluczu.
Możesz zrobić listę/vector które przechowują std::pair i je posortować predykatem.

http://www.codeguru.com/forum/archive/index.php/t-325645.html

0

Co za draństwo z tej std::map...ale cóż,widzę że Qt swoimi containerami za bardzo mnie rozbestwiło :P
Dzięki Bracie za wyjaśnienie tematu

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