2012-05-18 21 views
8

Mögliche Duplizieren:
Sort list using stl sort function
why only std::list::sort()?Sortier std :: Listen std :: sort

Meine Frage ist, können wir sortieren zwei std :: Listen std :: sort Funktion? Ich habe 2 String-Listen

während ich diese Listen sortiere ich bekomme Fehler. Ich habe mit std :: vector versucht, zu dieser Zeit funktioniert die Sortierung.

Der Fehler ist wie

C: \ Program Files (x86) \ Microsoft Visual Studio 10.0 \ VC \ include \ xutility (1158): siehe Erklärung von 'std :: operator -' 1 > C: \ Programme (x86) \ Microsoft Visual Studio 10.0 \ VC \ include \ Algorithmus (3642): Fehler C2784: '_Base1 :: Unterschiedstyp Std :: Operator - (const Std :: _ Revranit < _RanIt, _Base> &, const std :: _ Revranit < _RanIt2, _Base2> &) ': konnte das Template-Argument für' const std :: _ Revranit nicht ableiten < _RanIt, _Base> & ' von 'std :: _ List_iterator < _Mylist>' 1> mit 1> [ 1> _Mylist = std :: _ List_val> 1>]

ich weiß, müssen dass nur std :: sort Listen unterstützt?

+0

Überlastung der Operator Martol1ni

+0

mögliches Duplikat von [warum nur std :: list :: sort()?] (Http://stackoverflow.com/questions/7996116/why-only-stdlistsort) und [Liste mit stl sort function sortieren] (http://stackoverflow.com/questions/2432857/sort-list-using-stl-sort-function) –

+0

@ Martol1ni: Es ist 'std :: string'. 'operator <' ist definiert, aber es wird nicht helfen. –

Antwort

37

Sie können nicht std::sort verwenden std::list zu sortieren, weil std::sort erfordert, dass Iteratoren wahlfrei sind, und std::list Iteratoren sind nur bidirektional.

hat jedoch std::list eine Memberfunktion sort, die es sortieren wird:

list.sort(); 
// if you want to use a comparator different from the default one: 
// list.sort(comparator); 
7

Sie sollten list::sort verwenden, die möglicherweise einen anderen Algorithmus verwenden. std::sort erfordert Random-Access-Iteratoren (unterstützt Sprünge beliebiger Größe), während Listen-Iteratoren nur jeweils um eine Verbindung vorwärts oder rückwärts gehen können.

See C++ 11 25.4.1.1:

template<class RandomAccessIterator> void sort(RandomAccessIterator first, 
     RandomAccessIterator last); 

und 23.3.5.5/27 (Mitglieder std::list):

void sort(); 
template <class Compare> void sort(Compare comp); 
Verwandte Themen