Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Otscho Super JLI'ler
Alter: 36 Anmeldedatum: 31.08.2006 Beiträge: 338 Wohnort: Gummibären-Gasse Medaillen: Keine
|
Verfasst am: 01.07.2007, 08:14 Titel: map vs. list |
|
|
Hi,
ich bin gerade dabei mir sämtliche Resoucenmanager zu schreiben. Zuerst hab ich alle Elemente in ner list gespeichert wobei jedes Element ne eindeutige ID zur identifizierung bekam. Nach dieser ID konnte das Element dann später wieder gefunden werden. Irgendwann ist mir dann aufgefallen, dass alles was ich da schon gecodet hab ne map eingentlich auch schon kann.
Meine Fragen: ne Map ist ja nichts anderes als eine erweiterte list, oder ?
Gibt es da irgendwelche Performancevorteile einer Variante ? Weil können tun die dann quasi beide das gleiche.
Gibt es sonst irgendwelche Vorteile einer Variante ?
At Last : Welche Variante verwendet ihr meistens, und warum ? |
|
Nach oben |
|
|
fast hawk Senior JLI'ler
Anmeldedatum: 15.07.2005 Beiträge: 237 Wohnort: Freiburg Medaillen: Keine
|
Verfasst am: 01.07.2007, 08:38 Titel: |
|
|
hi
ich verwende list eigentlich überhaupt nicht sondern nur vecotr und map.
der vorteil von map ist das du die "Eindeutigekenziffer" die eine datei in windows hat übernehmen kannst sprich desen Dateinamen als Kennung.
Bei meiner Enegine benutze ich noch Zahlen zur Kennung was ich jetzt aber bereuhe da du wenn du hundert oder mehr Texturen hast dann ihrer aufpassen des die nicht die selben Nummer haben da die Nummer nicht von der Enegine ausgegeben werden (können da man immermalwieder feste Kennziffern braucht die sich nicht zu laufzeit ändern). Aber im Buch ist in einem Kapitel auch ein Resourcenmanager gebaut(gecodet). _________________ Jetziges Projekt: The Ring War
Status: 40%
-----------------------------------
Nicht weil es schwer ist, wagen wir es nicht, sondern weil wir es nicht wagen, ist es schwer.
--
Lucius Annaeus Seneca (4)
röm. Philosoph, Dramatiker und Staatsmann |
|
Nach oben |
|
|
David Super JLI'ler
Alter: 39 Anmeldedatum: 13.10.2005 Beiträge: 315
Medaillen: Keine
|
Verfasst am: 01.07.2007, 09:02 Titel: |
|
|
Hi!
Die Containertypen unterscheiden sich ganz essentiell voneinander. List ist als doppelt verlinkte Liste implementiert und erlaubt so ein extrem schnelles Einfügen von Elementen ohne Speicher kopieren zu müssen und großen Speichermanagementaufwand.
Map ist als Binärbaum implementiert, beim einfügen wird der Baum sortiert und ausbalanciert. Das ermöglicht zwar ein relativ schnellen Zugriff auf Elemente aber das Einfügen von Elementen dauert entsprechend länger. Bei großen Datenmengen könnts von der Performance doch kritisch werden.
In deinem Fall würde sich evtl eher eine Hashmap anbieten. Soweit ich weiß bietet TR1 sowas an.
fast hawk hat Folgendes geschrieben: |
ich verwende list eigentlich überhaupt nicht sondern nur vecotr und map.
|
Was hast du denn gegen List?
Eine schöne Grafik zur Auswahl des richtigen Kontainers ist übrigens diese hier. |
|
Nach oben |
|
|
DirectXer Dark JLI'ler
Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 06.07.2007, 14:40 Titel: |
|
|
fast hawk hat Folgendes geschrieben: |
ich verwende list eigentlich überhaupt nicht sondern nur vecotr und map |
also ich kann dir dringend empfehlen, genau zu überlegen welchen container du bei welchem Problem benutzt. Ich benutze auch eine ähnliche Grafik wie david, und es hat mir nachher schon viele Probleme erspart, wenn ich mir vorher länger Gedanken darüber gemacht hab. So kann es dann z.B. später dazu kommen, dass man eine bestimmte Funktion braucht, die im richtig gewählten Container schon von Haus aus dabei ist. Einige gravierende Vorteile einer List hat david ja auch schon genannt. In meiner Engine verwende ich bspw. eine Map in meinem Texturemanager, wo jedem String ein Zeiger auf eine Textur/Surface zugeordnet wird. In diesem String speichere ich entweder den Dateinamen oder einen Beschreibungsnamen, dann gefolgt von den Erstellungsparametern und IDs etc. So kann man dann sicherstellen, dass Texturen mit dem gleichen Dateinamen und den gleichen Parametern nur einmal erstellt werden; außerdem kann man die Erstellungsparameter und IDs für Reset- und Debugzwecke aus diesem Datenpointer rekonstruieren.
Gruß DXer |
|
Nach oben |
|
|
Jonathan_Klein Living Legend
Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 07.07.2007, 12:34 Titel: |
|
|
Ich verwende am meisten list. Z.b. für die Gegner, wenn die gerendert oder bewegt werden, muss man eh die gesammte Liste durchlaufen. Beim töten oder erstellen, kann ich die gut einfügen. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
|
|