www.mikrocontroller.net

Forum: PC-Programmierung Mehrstufiges Sortieren mit sort()


Autor: Torsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich benutze in C++ die sort() Funktion, um einen Vektor mit Strings zu 
sortieren.
bool operator<(const MeinVect& lhs, const MeinVect& rhs)
  {
// return-Funktion
  }

// Funktionsaufruf
sort (MeinVect.begin(), MeinVect.end());
Den Operator < habe ich - wie oben zu sehen ist - bereits überladen.

Soweit funktioniert das auch sehr gut, aber jetzt möchte ich gerne
eine zweistufige Sortierung haben, also erst nach 
MeinVect.Stringvariable1
sortieren und danach die bereits sortierten Teil-Abschnitte intern nach
MeinVect.Stringvariable2 sortieren.

Wie genau realisiert man so eine zweistufige Sortierung mit Vektoren am 
einfachsten?

Gruß,

Torsten

Autor: Stephan M. (stephanm)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Torsten schrieb:
> Wie genau realisiert man so eine zweistufige Sortierung mit Vektoren am
> einfachsten?

Per Fallunterscheidung:

bool operator <(const T &u, const T &v)
{
  return u.a() < v.a() || (u.a() == v.a() && u.b() < v.b());
}

Stephan

Autor: martin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du eine bereits sortierte Liste nochmals sortieren willst, dabei 
aber die vorherige Sortierung nicht gänzlich verlieren willst, dann 
soltlest du einen stabilen Sortieralgorithmus nehmen.

Soweit ich weiß befindet sich unter sort() eine Quicksort 
implementierung die nicht stabil ist.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Soweit ich weiß befindet sich unter sort() eine Quicksort
> implementierung die nicht stabil ist.

Deshalb gibt es ja auch noch stable_sort().

Autor: Michael Schikora (schiko)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>
> bool operator<(const MeinVect& lhs, const MeinVect& rhs)
>   {
> // return-Funktion
>   }
> 
> // Funktionsaufruf
> sort (MeinVect.begin(), MeinVect.end());
> 
> Den Operator < habe ich - wie oben zu sehen ist - bereits überladen.


Ich gehe davon aus, das obige ist aber nur ein Code --> Forum 
Schreibfehler, oder? (siehe Stephans Antwort)
Nicht dass Du an der falschen Stelle rumdokterst.

Schiko

Autor: Zwölf Mal Acht (hacky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sortieren ist 1. Stunde Informatik. Das sollte man drauf haben. So 
schwierig ist das auch nicht.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.