Datenstruktur gesucht



  • Hallo,

    ich suche eine Datenstruktur in der Art einer Map, also Schlüssel-Wert-Paare sollen gespeichert werden. Die Struktur will ich als Klasse in C++ implementieren, so dass ich sie als Funktionsargument übergeben kann. Der Datentyp des Schlüssels ist fest, allerdings nicht der der Werte. Mal sollen 32-bit Integer gespeichert werden, mal 64-bit. Wie kann ich das am besten realisieren? Stehe da gerade etwas auf dem Schlauch.

    Grüße tobi



  • Speicher doch einfach nur 64-Bitter 😉



  • Das war erstmal nur ein Beispiel. Und aus Performance-Gründen soll kein Speicher verschwendet werden.



  • Naja, dann musst du schon sagen, welche Möglichkeiten bestehen, wirklich Speicher zu sparen (zB. weil nicht alle Bits der Elemente gebraucht werden und zur Identifizierung des Typs hergenommen werden können) und was tatsächlich die gespeicherten Elemente sein werden.
    Wenn man zu int32 und int64 tatsächlich noch ein weiteres Feld hinzufügt, um den Typ zur Laufzeit unterscheiden zu können, hat man wegen des anzunehmenden Memory-Alignments nicht wirklich Speicher gespart. Bei größeren Objekten ist das natürlich ganz anders, oder wenn mann eben Bits zur freien Verfügung hat. Aber wir wissen ja nicht, was du damit genau bewerkstelligen willst/musst.



  • Template? Ich scheine das Problem nicht zu begreifen..



  • tobi94 schrieb:

    Das war erstmal nur ein Beispiel.

    Wenn man Beispiel-Fragen fragt, bekommt man Beispiel-Antworten geantwortet.
    Wir können auch nicht hellsehen, und woher sollen wir wissen was du wissen willst, wenn du was anderes fragst?

    Und aus Performance-Gründen soll kein Speicher verschwendet werden.

    Normalerweise tauscht man bessere Performance gegen mehr Speicherverbrauch. Oder weniger Speicherverbrauch gegen schlechtere Performance.
    Und wie Decimad schon geschrieben hat: der Bookkeeping-Overhead wird vermutlich gleich oder sogar mehr sein, als wenn du gleich alles als 64 Bit speicherst.
    Und die Geschwindigkeit wird garantiert schlechter.



  • Ok, ich glaube ich muss das noch ein wenig genauer erklären. Mein C++-Wissen ist jetzt auch nicht so gut, deshalb kann es auch nur ein Denkfehler von mir sein.

    Also ich habe verschiedene APIs, die zwar ähnlich funktionieren, aber unter anderem mit verschiedenen Wertebereichen arbeiten (also wieviel Bits die zurückgegebenen Werte haben). Je nach Programmversion wird davon eine verwendet, es ist also immer global bekannt, welcher Wertebereich gerade verwendet wird.

    Diese will ich nun so kapseln, dass sie über ein gemeinsames Interface angesprochen werden. An dieser Stelle brauche ich auch die gesuchte Datenstruktur. Das Interface soll aber nicht generisch sein, also nur Funktionen der Form tueWas(Datenstruktur) haben. Ich hab zwar auch erst an Templates gedacht, aber da das Interface nicht generisch ist, fällt diese Lösung ja dann raus?

    Das klingt jetzt alles vielleicht ein wenig komisch, hat aber schon durchaus Gründe. Vielleicht bin ich aber auch ein wenig verwirrt und sehe einfach eine simple Lösung nicht.



  • Mach "Datenstruktur" einfach Polymorph (Basisklasse + je eine Implementierung für 32 und 64 Bit).
    Nachteil: virtual-call Overhead bei jedem Funktionsaufruf.
    Vorteil: einfach zu implementieren.


Anmelden zum Antworten