Direkt Initialisieren map mit struct



  • Hi,
    ich hatte vor eine map mit einem Struct als Wert zu versehen. Problematik ist das ich quasi jedem Wert zuordnen will in welche Spalte er gehört und ob es Text oder numerischer Inhalt ist. Dafür bräuchte ich zu jedem Schlüssel 2 Werte. Code sieht momentan wie folgt aus:

    struct dbInput 
    { 
        CString name;
    	bool text; 
    }; 
    map<CString, dbInput> mapValuesBasic;			
    mapValuesBasic["JOBNAME"] = new ("basJobname", true);
    

    Den letzten Teil von dem setzen des Wertes hatte ich schon in verschiedenen Fassung klappt aber irgendwie nie. Kann ich da nicht einfach nur Werte setzen? Habe eigentlich nicht vor gehabt für jeden einzelnen Eintrag ein struct vorher extra zu definieren.
    Oderhat jemand eine bessere Idee wie ich das realsieren kann? ((Am Ende sollen SQL Statements dynamisch zusammengesetzt werden))

    Gruß und danke schonmal



  • new gibt einen Pointer zurueck, also musst du schreiben
    map<CString, dbInput*> mapValuesBasic;



  • dein "struct dbInput" hat keinen Konstruktor,

    implementiere

    struct dbInput 
    { 
        CString name;
        bool text; 
        dbInput(CString ..., bool...) {
           ...
        ...
    };
    

    dann kanst du machen:

    map<CString, dbInput> mapValuesBasic;            
    mapValuesBasic["JOBNAME"] = dbInput("basJobname", true);
    


  • ok.. danke, aber das Problem mit dem direkt zuweisen hab ich damit irgendwie nicht wirklich gelöst.

    mapValuesBasic["JOBNAME"] = dbInput(CString("basJobname"), true);
    

    an dieser Zeile häng ich ja eher (sieht wieder anders aus als vorhin ;)). Weiter die Frage: Kann man das nicht direkt mit Werten versehen ohne Zwischenschritt(e)?!

    Gruß

    Anmerkung:

    mapValuesBasic["JOBNAME"]->name = "basJobname";
    	mapValuesBasic["JOBNAME"]->text = true;
    

    so klappts ja, aber würd das gerne in einem Schritt machen.. <ums noch einmal zu verdeutlichen>



  • hm, also der von dir vorgeschlagene Konstruktor klappt nicht so ganz. habe nun aber in den Struct eine Methode gesetzt welche die Werte beschreibt. Das ganze sieht nun so aus:

    struct dbInput 
    { 
        CString name;
    	bool text;
    	dbSet(CString cstName, bool bolText) { 
    		name = cstName;
    		text= bolText;
    	}
    };
    mapValuesBasic["JOBNAME"]->dbSet("basJobname", true);
    

    Er warnt mich zwar das es aussieht we ein Konstruktor, aber bei deinem Beispiel bekam ich immer eine Fehlermeldung. Trotzdem danke für den Tipp.

    gruß



  • struct dbInput 
    { 
        CString name; 
        bool text; 
        dbSet(const CString &cstName, bool bolText) { 
            name = cstName; 
            text= bolText; 
        } 
    }; 
    
    //...
    std::map<CString, dbInput> mapValuesBasic;
    
    mapValuesBasic["JOBNAME"] = dbInput("basJobname", true);
    


  • jetzt weiß ich auch warum das gestern nicht geklappt hat mit dem Konstruktor. Hatte vom zweiten Post hier noch

    map<CString, dbInput*> mapValuesBasic;
    

    statt

    map<CString, dbInput> mapValuesBasic;
    

    stehen. Ohne den Pointer gehts nun auch mit Konstruktor.

    Besten Dank nochmal. 👍


Anmelden zum Antworten