Zwei STL-Maps nötig oder besserer Container?



  • Hi,

    ich hab mal wieder ein kleines Designproblemchen und hab immer noch keine Lösung gefunden. 😞

    Meine Netzwerkklasse muss Verbindungen zwischen Verbindung (= IP und Port) und ID herstellen. Beide sind natürlich eindeutig.

    Ich brauche jedoch schnellen Zugriff in beide Richtung, denn von der Verbindung zu ID muss ich auflösen, wenn ein Paket ankommt und andersrum, wenn eins verschickt werden soll.

    Natürlich könnte ich jetzt eins der beiden willkürlich als std::map-Key verwenden, aber um dann eine Auflösung von Value nach Key zu machen, müsste ich eben mit einem Iterator durchlaufen und das könnte bei vielleicht einigen hundert Verbindungen und wenn es bei jedem Paket durchgeführt wird ziemlich langsam werden.

    Im Moment sehe ich als einzigen Ausweg zwei Maps, oder habt ihr eine bessere Idee?

    ChrisM



  • Ich würde die zwei maps nehmen und eine Wrapperklasse rumbauen.



  • Also, wenn ich das richtig verstanden hab möchtest du eine MAp mit drei Wertkombination anlegen. Wenn dem so ist kannst du die std::Multimap nehmen.

    mfg
    Glamdring



  • Glamdrink schrieb:

    Also, wenn ich das richtig verstanden hab möchtest du eine MAp mit drei Wertkombination anlegen. Wenn dem so ist kannst du die std::Multimap nehmen.

    mfg
    Glamdring

    Eine Multimap erlaubt auch nur <key,value> . Der Unterschied ist nur das Du den gleichen Wert mehrfach halten kannst.



  • Hi,

    nein, ich habe nur zwei Werte (Verbindung und ID-Nummer), aber ich möchte in beiden Richtungen zuordnen, also von der Verbindung nach ID auflösen und umgekehrt.
    Das ginge mit einem Iterator mit einer Map zwar, aber dann wäre die Auflösung mit dem Iterator extrem langsam, weil sie nicht durch den Baum der Map beschleunigt wird (langsamer als std::vector!).

    ChrisM



  • was hast du denn gegen 2 maps? Speicher in ihnen Zeiger auf die Objekte (wenn die Verbindungen Objekte sind) dann hast du auch nciht das Problem mit dem doppelten Speicher zB. Und dann schreib ne Wrapperklasse rum, die das dann alles handelt. So würde ichs jedenfalls machen

    Allen ein frohes neues Jahr,
    Maxi



  • Hi,

    ich habe nichts gegen zwei Maps, ich frage mich nur, ob es nicht einen besseren Container, der mir bidirektionale Zuordnungen schnell ermöglicht, gibt.

    ChrisM



  • Auf CodeProject gibt es einen Beitrag dazu.

    http://www.codeproject.com/vcpp/stl/bimap.asp?target=bidirectional



  • Hi,

    cool, das ist genau das, was ich suche! Auf der Seite werde ich mich mal anmelden und mir das runterladen!

    Danke! 🙂

    ChrisM


Anmelden zum Antworten