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

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
D3DX
Beiträge: 36
Registriert: 17.10.2010, 14:06
Echter Name: Marco
Wohnort: 58119 Hagen (NRW)

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

Beitrag 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
Zuletzt geändert von D3DX am 21.05.2013, 18:32, insgesamt 1-mal geändert.
Benutzeravatar
RustySpoon
Establishment
Beiträge: 298
Registriert: 17.03.2009, 13:59
Wohnort: Dresden

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

Beitrag 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.
D3DX
Beiträge: 36
Registriert: 17.10.2010, 14:06
Echter Name: Marco
Wohnort: 58119 Hagen (NRW)

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

Beitrag 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.
EyDu
Establishment
Beiträge: 100
Registriert: 24.08.2002, 18:52
Wohnort: Berlin
Kontaktdaten:

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

Beitrag von EyDu »

Noch ein kleiner Einwurf: Ich würde die IP als uint32 und den Port als unit16 speichern.
Florian Keßeler
Beiträge: 75
Registriert: 24.07.2002, 00:00
Wohnort: Bremen
Kontaktdaten:

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

Beitrag 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.
D3DX
Beiträge: 36
Registriert: 17.10.2010, 14:06
Echter Name: Marco
Wohnort: 58119 Hagen (NRW)

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

Beitrag 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]
Benutzeravatar
Schrompf
Moderator
Beiträge: 4855
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

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

Beitrag 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.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
D3DX
Beiträge: 36
Registriert: 17.10.2010, 14:06
Echter Name: Marco
Wohnort: 58119 Hagen (NRW)

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

Beitrag 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"
Antworten