(Die Anzahl der Elemente der Listen ist immer gleich groß.)
Nach folgenden Bedingungen soll sortiert werden
1. Liste 3 Nach Liste1 (groß -> klein) ordnen
2. Zahlen in Liste1 mehrfach vorhanden = nach entsprechenden Elementen (index!) von Liste2 ordnen (groß -> klein)
3. Zahlen in Liste2 auch mehrfach vorhanden = nach index ordnen (groß -> klein)
a.) Liste1 sortiert
b.) Liste1 [3,3] mit Liste2 Elementen [200,400] also Ergebnis << ab << auf;
c.) Liste1 [5,5] mit Liste2 Elementen [300,300] also Ergebnis << zu << an;
d.) Liste1 [6] also Ergebnis << wo;
e.) Liste1 [8] also Ergebnis << wer;
Ergebnis = [ab, auf, zu, an, wo, wer]
FRAGE:Kann ich diese mühselige Aufgabe nicht auch einfacher machen mit QMap oder einem QHash? Gibt es nicht die Möglichkeit einfach eine virtuelle Tabelle aufzubauen und dann nach x Kretarien zu sortieren?
Zuletzt geändert von 24dan am 11. April 2010 16:00, insgesamt 3-mal geändert.
"Der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott."
(W. Heisenberg)
Also an beide vielen Dank qsort und ein paar suchen bei google habe es gebracht.
Idee:
Ich stecke die Parameter für die Sortierung einfach in richtiger Reihenfolge für die einzelnen Indizes der Elemente in je einen String und die alle in eine List. Dann setze ich qsort drauf an und siehe da.....
Zahl -> String -> Zahl ist aber nicht sonderlich performant.
Denkst du es wäre möglich, die drei Zahlen in einen Struct zu packen und dafür dann entsprechende Vergleichsoperatoren anzubieten?
Also zu meiner Überraschung funktioniert das mit Zahl -> String auch nicht da qsort die String "Zahlen" nicht sieht und somit auch 210 kleiner ist als 56.
Also qsort QStringList ist nicht möglich.
@franzf Also ich versuche es gerade mal mit QVector<QPair(int x, int y)>
Kannst Du mir genauer erklären was Du Dir bei struct und Vergleichsoperatoren gedacht hast?
Mein Hauptproblem ist die Alten Indizes nach dem qsort noch zu wissen.
Wenn ich das hinbekomme mir die zu merken und schnell mit den sortiertem Wert in Verbindung zu bringen...
Zuletzt geändert von 24dan am 11. April 2010 15:26, insgesamt 1-mal geändert.
"Der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott."
(W. Heisenberg)
Das war SO aber nicht meine Idee!
Du führst drei Listen, die irgendwie zusammengehören. Warum also die zusammengehörigen Daten nicht in einen Datensatz (struct) legen. Dann wird aus einem furchtbaren, fehleranfälligen Monster ein netter kleiner "operator<". Ist es denn ein absolut unausweichliches Muss, da drei separate Listen zu führen? Bzw. welche Bedingungen hast du für das Projekt und dessen Realisierung?
Also ja Du hast Recht. Ich stöhne nur auf weil das viel Zeit braucht um verstehen was hier gemacht werden soll.
Kurz: Ich habe schon einen eigene Klasse (struct) angelegt von der ich jeweils dann Objekte (Elemente meiner Listen) bilde und die Daten darin verwalte.
Fazit: Ich sollte wohl diese Klasse mit einer Methode ausstatten in der die Sortierung stattfinden kann.
//! Klasse für die Auswertung
class TEIL
{
//public slots:
public:
TEIL *next;
TEIL *first;
TEIL();
~TEIL();
// Hier sind die Zahlen 1 bis 3
unsigned long i_zw;
unsigned long i_owa;
unsigned long i_owb;
stuff..
// FUNKTIONEN DER KLASSE TEIL
unsigned long kodieren (QChar bst,
unsigned long i_ow_beta );
TEIL * getFirst(void);
TEIL * getNext(void);
void setFirst(TEIL *ptrOberebene,
TEIL *ptrUnterebene);
TEIL * setNext(TEIL *erster,
TEIL *neu);
void setNULL( TEIL *ptrZuruecksetzten );
void aufAddieren(TEIL *ptrOberebene);
stuff..
// Hierher gehört eigentlich auch:
void sortieren();
"Der erste Trunk aus dem Becher der Naturwissenschaften macht atheistisch, aber auf dem Grund des Bechers wartet Gott."
(W. Heisenberg)