Teilbereich einer std::list sortieren



  • Ich habe zwei Iteratoren einer std::list (nicht begin() und end()) und möchte alles zwischendrin sortieren.

    Also

    std::list<int> l; // l ist bekannt
    std::list<int>::iterator from=std::next(l.begin()),
                             to  =std::prev(l.end()); // z.B.
    
    std::sort(from, to); // geht nicht
    l.sort(from, to); // geht nicht
    

    Wie kann ich das für std::list machen?

    Es handelt sich in meinem Code zwar um eine std::list, aber schön wäre, wenn das auch allgemein gehen würde.



  • Std::sort sortiert keine Listen, da diese keine random access iteratoren hat.



  • split die liste in 3 teile [begin(), from) [from,to),[to,end()) sortiere dann die mitlere list mit list::sort und merge die Listen dann wieder.


  • Mod

    otze schrieb:

    merge die Listen dann wieder.

    ... das funktioniert natürlich nicht, da beim Mergen die Listen sortiert werden. Es soll aber das mittlere Stück unverändert bleiben und für sich sortiert sein.

    Darf man fragen, wofür du das brauchst?



  • War mit dem mergen vielleicht splicen gemeint? So würde es funktionieren.


  • Mod

    Flashput schrieb:

    War mit dem mergen vielleicht splicen gemeint? So würde es funktionieren.

    Ja, das funktioniert.


Log in to reply