struct? array? Ich bin mir nicht sicher, bitte um hilfe. [ge

Du bist neu in der Welt von C++? Dann schau hier herein!
Antworten
thc2_67
Beiträge: 16
Registriert: 28. August 2011 09:43

struct? array? Ich bin mir nicht sicher, bitte um hilfe. [ge

Beitrag von thc2_67 »

Hallo,

folgende Ausgangssituation:
Ich arbeite an einem kleinen Programm welche zB auch die Strafzeiten (Penalties wie beim Eishockey) beinhaltet, dh. es wird die Spielernummer und die
Restlaufzeit der Strafe getrackt.

Damit auch auf einer externen Anzeigetafel immer die niedrigste Strafzeit ganz oben steht, muss die "table" für die Strafzeiten nach der Restlaufzeit der Strafe sortiert sein und gleichzeit eine direkte Verbindung zum Spieler, also der Spielernummer haben. Natürlich können auch mehrere Spieler gleichzeit mit unterschiedlicher Strafdauer eine Strafe bekommen, daher ist die Sortierung notwendig.

Ich habe da schon einiges getestet, aber leider noch nicht "gelbe vom Ei" gefunden.

zB habe ich mittels "struct" eine Verbindung zwischen Spielernummer und Strafzeit definiert, und diese dann in array "geschoben". Aber das Sortieren, da scheitere ich.
Oder gibt es bessere Ansätze?

Bin dankbar für jeden Hinweis.
Grüsse Alex
Zuletzt geändert von thc2_67 am 12. August 2012 14:23, insgesamt 1-mal geändert.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Re: struct? array? Ich bin mir nicht sicher, bitte um hilfe.

Beitrag von upsala »

Eine Möglichkeit wäre ein struct und eine QList und dieser Teil der Doku:
http://doc.qt.nokia.com/latest/qtalgori ... ml#qSort-2
thc2_67
Beiträge: 16
Registriert: 28. August 2011 09:43

Re: struct? array? Ich bin mir nicht sicher, bitte um hilfe.

Beitrag von thc2_67 »

OK, danke für die schnelle Antwort ich werds einmal testen.

Mein struct sieht ungefähr so aus:

struct { unsigned long penalty_time; int penalty_nr; };

Nun habe ich noch eine Frage: da sich die "penalty_time" laufend ändert (da werden mittels *timer aktualisert) muss ich alle Sekunden den Wert von "penalty_time"
aktualiseren und somit wird alle Sekunden auf die QList zugegriffen.

Aus Eurer Erfahrung heraus ist es besser diese Aktualierung mittels Iterator zu machen oder mittels "for each"? Oder doch anders? :roll:

Danke nochmals.

Grüsse
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: struct? array? Ich bin mir nicht sicher, bitte um hilfe.

Beitrag von franzf »

Nichts von Beiden :D
Aktualisierung der Anzeige ist Sache der Anzeige. Ich würde in dem struct den Spieler, die gesamte Strafzeitlänge (die kann doch sicher variieren, einer bekommt 5, der andere 3 Minuten) und den Beginn der Strafe ablegen. Aus Beginn und Länge lässt sich leicht die Restzeit errechnen. Per Timer wird die Anzeige aktualisiert, wenn die Reststrafzeit 0 wird, erfolgt keine Anzeige. Hier wird eine temporäre Liste erzeugt (mit Kopien der structs der Gesamtliste), die dann auch nach Restlaufzeit sortiert wird und danach angezeigt.
Ein weiterer Vorteil: Wenn die Daten in dem struct nicht verändert werden, kann man sie nach dem Spiel für eine statistische Auswertung heranziehen. Auch kann ein Spieler mit der höchsten Gesamtstrafzeit zum BadBoy des Spiels gewählt werden :D usw.
thc2_67
Beiträge: 16
Registriert: 28. August 2011 09:43

Re: struct? array? Ich bin mir nicht sicher, bitte um hilfe.

Beitrag von thc2_67 »

Danke erstmal für den Input.

Die Idee mit den Statistiken ist gut. Ich habs zurzeit so gelöst, dass diese Daten (auch aus Gründen zur externen Verarbeitung) dann in einem LogFile landen und unveränderbar auf der HDD gespeichert werden (dass funkt auch schon).

Momentan hab ich einen Knopf drinnen. :cry:
Wo ich momentan nicht weiterkomme, ist die Sache, dass die Strafen immer in Verbindung mit dem Spieler stehen, daher kann ich auch keine einfache QList verwenden, deshalb dachte ich auch an ein struct, welches dann in der QList abgelegt werden.
Oder kann QList auch folgende Inhalte korrekt sortieren: "120000_67" -> 120000=Dauer der Strafe (oder Restlaufzeit), 67=Speilernummer. Sortierung soll nach Dauer der Strafe (Restlaufzeit) werden. Dh. in der QList sollte dann die sortierte Reihenfolge so aussehen:

1. Eintrag: 1000_67
2. Eintrag: 12000_12

:?:
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Re: struct? array? Ich bin mir nicht sicher, bitte um hilfe.

Beitrag von franzf »

Das ginge nur über einen String - ist aber Mist! Pack es doch in einen struct PenaltyInfo (o.Ä.) (Spielernummer, Strafzeit, Strafbeginn), und biete einen passenden operator< an, damit du die QList<PenaltyInfo> sortieren kannst. Alles andere wären nur Hacks, die irgendwann nur noch Probleme bereiten.
Wg. Operatorüberladung schau in dein Buch oder gleich hier
thc2_67
Beiträge: 16
Registriert: 28. August 2011 09:43

Re: struct? array? Ich bin mir nicht sicher, bitte um hilfe.

Beitrag von thc2_67 »

OK, aber jetzt habe ich noch eine andere Frage:

wie kann ich dann auf die "struct"-elemente in der QList zugreifen? Mit .value(struct.mitglied) bekomm ichs leider nicht hin.
Danke nochmals für die Hilfe für einen Neuling.

Grüsse
thc2_67
Beiträge: 16
Registriert: 28. August 2011 09:43

Re: struct? array? Ich bin mir nicht sicher, bitte um hilfe.

Beitrag von thc2_67 »

GELÖST!!
-=Freaky=-
Beiträge: 503
Registriert: 29. Dezember 2006 22:54
Wohnort: HL

Re: struct? array? Ich bin mir nicht sicher, bitte um hilfe.

Beitrag von -=Freaky=- »

thc2_67 hat geschrieben:GELÖST!!
wie?
Antworten