problem mit stl map

  • ich würde gern eine stl map mit einem paar aus <char *, Objekt> machen.

    Es soll eine liste von objekten, die ich (eventuell)laden muss verwalten. und zwar soll wenn der dateiname( char* ) noch nicht in der map ist, das objekt gelagen und in die map eingetragen werden.
    ansonsten, soll ein zeiger auf mein objekt in der map zurückgegeben werden.

    ich habs auch shcon mit <string,object> versucht, da hab ich dann zusätzlich das problem, dass "load" ein "char *" erwartet.
    wie ich auf das element in der map zugreifen soll weis ich auch noch nicht.
    danke schon amal für die hilfe.

  • Zitat

    Ich würde gern eine stl map mit einem paar aus <char *, Objekt> machen.

    Das ist mir nicht ganz klar.
    ist char* der Key der map ?
    Und object Objekte die in der Map gespeichert werden ?
    Ist es so gedacht ?

    Zitat


    Es soll eine liste von objekten

    Hmmm ... was jetzt ?
    liste oder map ?
    beides verknüpft ?
    ???

    Zitat


    ich habs auch shcon mit <string,object> versucht, da hab ich dann zusätzlich das problem, dass "load" ein "char *" erwartet.

    das ist kein problem, string hat eine const char* c_str() Methode die den string "C Style" zurückgibt.

    Kurzum: Keine Ahnung was Du genau haben willst.

    Mfg, LB


    Trading for a living [equities,futures,forex]

  • es soll eine MAP sein,
    char * als KEY.
    pobject als WERTE.

    Zitat

    das ist kein problem, string hat eine const char* c_str() Methode die den string "C Style" zurückgibt.


    und das geht eben nicht, weil der sagt, er kann const cahr * nicht in char * konvertieren.

    hab mich da sehr ungenau ausgedrückt, aber als c++ und stl neuling hat man ein schweres leben.
    lg, flo

  • Eine leicht perverse Methode wäre
    vorm Aufruf den String in einen (non const) C-String zu kopieren
    z.B so

    Code
    char *newCstr;
    newstr = new char[TheString.size());
    strncpy(newCStr, TheString.c_str(), TheString.size())+1);
    aufruf(newCStr);
    delete[] newCStr;



    Der Vorteil von string ist, daß es schon einen compare operator definiert hat, den KEY braucht.
    Bei char* ist das klarerweise nicht der Fall.

    Auch das sollte kein Problem sein.

    Völlig ungetester(!) Code

    Code
    class CStrKeyCompare
    {
    public:
    	 bool operator()(char* input1, char* input2) const
    	 {
    		 return strcmp(input1, input2) < 0;
    	 }
    };



    Definition der map mit dem neuen comp operator für char*

    map<char*, Objekt, CStrKeyCompare> whatever;

    Mein Code hat möglicherweise ein paar Fehler, aber im PRINZIP sollte es so oder so ähnlich gehen.
    (Sollte nur das Prinzip zeigen)

    Zitat


    als c++ und stl neuling hat man ein schweres leben.

    Jo :D

    [EDiT]
    Kritischer Punkt bei den eigenen Vergleichsoperatoren für KEY ist, daß es Strict Weak Ordering implementieren muß.
    Ansonsten gibt das böse bugs.
    [/EDIT]

    Mfg, LB


    Trading for a living [equities,futures,forex]

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!