2008-10-19 11 views
7

Ich habe eine verknüpfte Liste, die ich will von Teil sortieren, zB:Teil Art von std :: list

std::sort(someIterator, otherIterator, predicate); 

std :: sort erfordert Random-Access-Iteratoren so dass dieser Ansatz nicht funktioniert. Es gibt eine Spezialisierung std :: list :: sort, aber das kann nur die gesamte Liste sortieren. Ich glaube nicht, dass ich genug Zugang zu den Listenmitgliedern habe, um selbst etwas zu schreiben.

Gibt es eine Möglichkeit, dies zu tun, ohne zu sagen, Vektor?

+0

und was ist der Hauptgrund, warum Sie Liste anstelle von Vektor verwenden? Trotz der Tatsache, dass std :: vector den Befehl avg ausführen muss. halbe Elemente (zB beim Löschen), ist es super schnell dank Cache. std :: vector beats std :: list auch beim häufigen löschen und einfügen auf rand. Pos. Sie müssen eine sehr große Anzahl von Elementen haben, um von der Verwendung der Liste zu profitieren. – relaxxx

+0

Nun, ehrlich gesagt kann ich mich nicht mehr erinnern, da ich in den dreieinhalb Jahren, seit ich gefragt habe, ziemlich sicher bin, dass es irgendwie weggestopft wurde und ich diesen Job sowieso schon längst aufgegeben habe. Der Punkt der Frage war nicht so sehr die Effizienz (obwohl es eine faire Chance gibt, dass es genug Daten gab, die ich nicht sofort hätte kopieren wollen), sondern einfach Neugier; Es schien seltsam, dass ich nicht in der Lage war, diese teilweise Art zu tun, und dass es einen Weg geben sollte, es zu erreichen. – Peter

+0

oh: D mein Schlechter ... Ich bin über diese Frage durch Suche nicht durch "aktive Fragenseite" gestolpert und habe das nicht gemerkt :) Ich dachte eigentlich das ist aktive Frage. – relaxxx

Antwort

12

Wie wäre es, den Teil der Liste, die Sie sortiert haben möchten, in eine eigenständige Liste, , dann die spezialisierte Liste sortieren, dann haken Sie es wieder in die ursprüngliche Liste?

+2

Das ist eine gute Idee. Es ist leicht, die Kraft der splice() - Methode zu vergessen. – bk1e

+0

+1 Das ist der einfachste Weg, dies zu tun. – Nawaz

Verwandte Themen