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
[gelöst][c++] Wie richtig eine "Liste" erstellen
[gelöst][c++] Wie richtig eine "Liste" erstellen
Zuletzt geändert von D3DX am 21.05.2013, 18:32, insgesamt 1-mal geändert.
- RustySpoon
- Establishment
- Beiträge: 298
- Registriert: 17.03.2009, 13:59
- Wohnort: Dresden
Re: [c++] Wie richtig eine "Liste" erstellen
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.
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
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.
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
Noch ein kleiner Einwurf: Ich würde die IP als uint32 und den Port als unit16 speichern.
-
- Beiträge: 75
- Registriert: 24.07.2002, 00:00
- Wohnort: Bremen
- Kontaktdaten:
Re: [c++] Wie richtig eine "Liste" erstellen
Würde ich nicht tun. Dann kannst du nämlich für IPv6 dein Programm nochmal komplett umschreiben.EyDu hat geschrieben:Noch ein kleiner Einwurf: Ich würde die IP als uint32 und den Port als unit16 speichern.
Re: [c++] Wie richtig eine "Liste" erstellen
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]
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]
- Schrompf
- Moderator
- Beiträge: 5047
- Registriert: 25.02.2009, 23:44
- Benutzertext: Lernt nur selten dazu
- Echter Name: Thomas
- Wohnort: Dresden
- Kontaktdaten:
Re: [gelöst][c++] Wie richtig eine "Liste" erstellen
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.
Re: [gelöst][c++] Wie richtig eine "Liste" erstellen
..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"
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"