STL+Indexvergabe



  • Morgen zusammen!

    Kurz etwas zum Hintergrund:
    Ich habe bisher in meinen Anwendungen lediglich selbstgeschriebene LinkedLists und HashMaps verwendet. Aus dem einfachen Grund: Ich wollte solche Datenstrukturen erst mal selbst geschrieben haben, um auch wirklich zu verstehen wie derartige Konstrukte im Detail arbeiten.

    Nur sind meine Lösungen, was die Effizienz anbelangt, mit Sicherheit nicht der Weissheit letzter Schluss. So tief steck ich in der Materie auch wieder nicht drin. 😉
    Also hab ich mich nun dazu entschlossen für künftige Anwendungen die STL zu verwenden. Jetzt ergibt sich meinerseits allerdings eine gewisse Unsicherheit.
    Und zwar aus folgendem Grund:
    -----------------------------
    Nehmen wir mal das Beispiel HashMap:
    In meiner selbstgeschriebenen HashMap werden alle eingetragenen ContentObjekte automatisch mit einem Index versehen(alle Objekte meiner Anwendung verfügen über eine Routine 'setIndex(int indx)' => die Map muss also nur die setIndex-Methode auf das betroffene ContentObjekt anwenden).
    D.h.: Indexvergabe in der Reihenfolge, in der die einzelnen Buckets in der Map und die einzelnen ContentObjekte wiederum im jeweiligen Bucket liegen.
    ->sieht so aus:

    HashMap(Bsp.):
    --------------
    
    Bucket[0] -> content[0], content[1], content[2]
    Bucket[1] -> content[3], content[4] 
    Bucket[2] -> content[5]
       .
       .
       .
    Bucket[n] -> content[253], content[254]
    

    Natürlich wird die Indexstruktur auch angepasst, wenn ein ContentObjekt aus der Map gelöscht wird!

    Dann hatte ich ebenso die Möglichkeit durch die HashMap aus den eingetragenen ContentObjekten ein Array zu erzeugen. Natürlich mit der gleichen Indexstruktur!
    D.h.:
    -----

    cType *cArray=map->createContentArray():
    
    sich ergebendes Array:
    cArray[0]   = content[0]
    cArray[1]   = content[1]
    cArray[2]   = content[2]
       .
       .
       .
    cArray[254] = content[254]
    

    Somit ist jedem ContentObjekt, bereits nach dem Einfügen in die Map, bekannt, welchen Index es denn später einmal in einem ContentArray haben könnte. Natürlich hat so ein Index auch noch weitere Vorteile! Es geht mir hier nur darum darzustellen, wie die Indizes vergeben werden sollen!

    Nun aber zu meiner eigentlichen Frage:
    Ist eine Implementierung dieser Funktion in den Templateklassen der STL sehr aufwändig bzw. geht es überhaupt?
    Kann ich vielleicht die entsprechenden Routinen überschreiben?

    Vielen Dank für eure Hilfe!

    Grüße,
    TS++

    P.S.: Die Sache mit den Indizes soll natürlich auch für die LinkedList funktionieren!



  • du könntest z.b. einen doppelten vektor nehmen, oder wenn du automatische sortierung willst, maps.
    doppelt im sinne von vector<vector<string>>

    [ Dieser Beitrag wurde am 08.05.2003 um 12:05 Uhr von Korbinian editiert. ]



  • Danke für die Antwort!

    Aber die Indexzuweisung mit 'setIndex(int indx)' müsste ich ja immer noch selbst durchführen. (es ist wichtig, dass die ContentObjekte ihren Index innerhalb des Containers kennen!)

    Da ich allerdings noch keinerlei Erfahrung mit STL habe, wäre ich sehr dankbar, wenn mir jemand etwas auf die Sprünge helfen könnte, an welchen Stellen in der LinkedList und der HashMap ich denn ansetzten müsste, um meine Änderungen durchzuführen.
    Sonst müsste ich ja jetzt den grosszügig auskommentierten 😉 Quellcode der Container vollständig durcharbeiten, obwohl ja offensichtlich nur eine kleine Änderung erforderlich ist.

    Danke!

    Grüße,
    TS++

    [ Dieser Beitrag wurde am 08.05.2003 um 12:56 Uhr von TS++ editiert. ]



  • Original erstellt von TS++:
    Aber die Indexzuweisung mit 'setIndex(int indx)' müsste ich ja immer noch selbst durchführen. (es ist wichtig, dass die ContentObjekte ihren Index innerhalb des Containers kennen!)

    du könntest den index als member mit in die klasse stecken, und eine extra steuerklasse basteln, die den doppel-vektor enthält. über diese steuerklasse kannst du dann bequem zugreiffen, und die indexierung müsste dann die steuerklasse automatisch übernehmen.
    dann allerings wärs schon fast wurscht, und du könntest deine eigene liste verwenden 🙂



  • Morgen!

    Hast recht!
    Meine eigenen Container hab ich ja schon. Ich werde jetzt in allen Fällen, die Indizierung erfordern, meine eigene LinkedList und meine eigene HashMap verwenden. In allen anderen Fällen, besonders wenn es sich um zeitkritische Vorgänge handelt, kann ich ja getrost auf die STL zurückgreifen.

    Damit müsste ich eigentlich alle Probleme lösen können!

    Grüße,
    TS++


Anmelden zum Antworten