Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

the[V]oid

Alter Hase

  • »the[V]oid« ist der Autor dieses Themas

Beiträge: 775

Wohnort: Aachen

  • Private Nachricht senden

1

05.07.2010, 15:39

Vector3<int> als Schlüssel bei Zuordnung

Hallo


Ich muss irgendwie eine Zuordnung realisieren, wobei als Schlüssel ein Vektor von drei Ganzzahlen vorliegt.
Wie mache ich das ambesten?

Die naheliegendste Lösung, namentlich std::map<Vector3<int>,void*> gefällt mir damit nicht, dass hier der Vergleichsoperator von Vector3<int> herangezogen wird, wodurch ein Lookup in der Map ziemlich langsam wird, da die Schlüssel nicht sortiert werden können.

Ich habe überlegt, drei Maps anzulegen. Aber das wäre alles andere als schön und es muss doch eine elegantere Lösung geben.

Andere Möglichkeit wäre, als Schlüssel einen 12 Byte breiten Integer zu verwenden, falls das überhaupt geht.
Allerdings gefällt mir hier nicht, dass man die Breite des Integers quasi hardcoden muss.
Dadurch wird es nicht mehr so leicht möglich, den Komponententyp des Vector3 von int auf etwas anderes zu wechseln.

Möglicherweise wäre es die beste Lösung, einen Hashcode für die Vektoren zu berechnen.
Da wiederum fehlt mir aber ein gescheiter Ansatz für einen vernünftigen Algorithmus.


Weiß jemand etwas?
Danke im Voraus
<< an dieser Stelle ist eine Signatur verstorben >>

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »the[V]oid« (05.07.2010, 15:52)


TGGC

1x Rätselkönig

Beiträge: 1 799

Beruf: Software Entwickler

  • Private Nachricht senden

2

05.07.2010, 16:53

Schreib eine Klasse MyKey und einen passenden Vergleichsoperator. Darin kannst du dann genau das einbauen, was du brauchst.

CBenni::O

1x Contest-Sieger

Beiträge: 1 145

Wohnort: Stuttgart

  • Private Nachricht senden

3

05.07.2010, 17:06

Wie wäre es mit einer "normalen" hashfunktion, der du deinen aus den zwei/drei komponenten des vektors "zusammengebackenen" int übergibtst?
z.B.

C-/C++-Quelltext

1
2
3
vector2<int32> v;
int64 i = v.x<<16+v.y;
hash(i); //in die liste einfügen

ich weiß nicht, ob das optimal gelöst ist, aber es sieht ganz gut aus und ist bestimmt auch relativ schnell...
mfg CBenni::O
Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.
42!
Aufräumen kann jeder, nur das Genie überblickt das Chaos!
Metal will never die!
1. Sppro Gamecontest - mein Beitrag

the[V]oid

Alter Hase

  • »the[V]oid« ist der Autor dieses Themas

Beiträge: 775

Wohnort: Aachen

  • Private Nachricht senden

4

05.07.2010, 18:23

Der Lösungsansatz von TGGC war genau das, was ich gesucht habe.
<< an dieser Stelle ist eine Signatur verstorben >>

Werbeanzeige

Ähnliche Themen