Forum: PC-Programmierung Mehrstufiges Sortieren mit sort()


von Torsten (Gast)


Lesenswert?

Hallo,

ich benutze in C++ die sort() Funktion, um einen Vektor mit Strings zu 
sortieren.
1
bool operator<(const MeinVect& lhs, const MeinVect& rhs)
2
  {
3
// return-Funktion
4
  }
5
6
// Funktionsaufruf
7
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

von Stephan M. (stephanm)


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

von martin (Gast)


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.

von Rolf Magnus (Gast)


Lesenswert?

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

Deshalb gibt es ja auch noch stable_sort().

von Michael S. (schiko)


Lesenswert?

>
1
> bool operator<(const MeinVect& lhs, const MeinVect& rhs)
2
>   {
3
> // return-Funktion
4
>   }
5
> 
6
> // Funktionsaufruf
7
> sort (MeinVect.begin(), MeinVect.end());
8
>
> 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

von Purzel H. (hacky)


Lesenswert?

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.