Seite 1 von 1

[gelöst][c++] Wie richtig eine "Liste" erstellen

Verfasst: 20.05.2013, 13:18
von D3DX
Hallo zusammen,
ich würde gerne folgendes umsetzen:

- es gibt eine UserID als unsigned int
- es gibt zu jeder UserID eine Adresse als string
Beides wird von Raknet übergeben.

> die zu erwartenden Anzahl an UserIDs ist zur Laufzeit unbekannt

Da die UserID keine fortlaufende Nummer ist, möchte ich zu jedem User eine unsigned int hinzufügen,
welche dann aber aufsteigend addiert.

Zeile 1
unsigned int Nummer 0
unsigned int UserID 65189753
string Adresse 192.168.178.22:1234

Zeile 2
unsigned int Nummer 1
unsigned int UserID 49752335
string Adresse 88.123.187.15:1515

usw...


Was ist hierfür am besten zu verwenden und wie? array, list, vector?


In einer Datenbank mit mysql(php) würde ich es einfach mit Zeilen und Spalten umsetzen, nur mit c++ (ohne sqLite) stehe ich auf dem Schlauch... :roll:

Schönen Gruß
Marco

Re: [c++] Wie richtig eine "Liste" erstellen

Verfasst: 20.05.2013, 13:40
von RustySpoon
Hängt davon ab, was du damit anstellen willst. Die Komplexitäten für Standardoperationen wie Einfügen, Löschen und Suchen sind natürlich überall anders.

Klingt für mich aber, als wenn du letztendlich eine Abbildung von deinen UserIDs auf User-Daten realisieren willst. Wenn die UserIDs schon nicht fortlaufend oder beschränkt sind, lässt sich aber vielleicht dennoch eine vernünftige Hashfunktion ableiten. Damit könntest du deine Daten in einer Hashtabelle ablegen und hättest assoziativen Zugriff bei näherungsweise konstanter Zeitkomplexität.

Wenn du fortlaufende Nummern hast, welche du als Indizes verwenden kannst, dann nimm einfach einen Vector.

Re: [c++] Wie richtig eine "Liste" erstellen

Verfasst: 20.05.2013, 14:37
von D3DX
danke für die schnelle Antwort...

Mir kam gerade noch die Idee eines struct arrays.
da ich auf such und sortiert Funktionen nicht angewiesen bin.

Re: [c++] Wie richtig eine "Liste" erstellen

Verfasst: 21.05.2013, 11:10
von EyDu
Noch ein kleiner Einwurf: Ich würde die IP als uint32 und den Port als unit16 speichern.

Re: [c++] Wie richtig eine "Liste" erstellen

Verfasst: 21.05.2013, 13:07
von Florian Keßeler
EyDu hat geschrieben:Noch ein kleiner Einwurf: Ich würde die IP als uint32 und den Port als unit16 speichern.
Würde ich nicht tun. Dann kannst du nämlich für IPv6 dein Programm nochmal komplett umschreiben.

Re: [c++] Wie richtig eine "Liste" erstellen

Verfasst: 21.05.2013, 18:30
von D3DX
Vielen Dank für eure Antworten.

Konnte es mit einem struct-array umsetzen.
Raknet übergibt mir bereits die entsprechenden Daten.
Um sie dem entsprechenden Client zuzuordnen, würde mir bereits die UID in unsigned int reichen.

Demnach brauche ich mir weiter keine Gedanken wegen ipv6 machen..

Deshalb... für mich
[gelöst]

Re: [gelöst][c++] Wie richtig eine "Liste" erstellen

Verfasst: 22.05.2013, 10:56
von Schrompf
RakNet hat auch die RakPeer::GetIndexFromSystemAddress() Funktion und die entsprechende Gegenrichtung. Damit bekommst Du den Array-Index des RakNet-internen Arrays. Den kannst Du auch einfach direkt nutzen, wenn Du willst.

Re: [gelöst][c++] Wie richtig eine "Liste" erstellen

Verfasst: 22.05.2013, 17:00
von D3DX
..das mit dem GetIndexFromSystemAddress() war genau das, was ich eigentlich gesucht habe bzw. versucht habe,
selber umzusetzen. Nun kann ich mir die for-Schleife in meinem code sparen und das client-array
direkt mit client[server->GetIndexFromSystemAddress() ] ansprechen.

Hatte hierbei immer den Fehler gemacht, es auf der client-Seite über client->GetIndexFromSystemAddress() auszulesen,
was aber auf jeden client "0" als Wert ausgab (eigentlich logisch).

Gute Idee & danke an "Schrompf"