Frage zu std::map



  • wollte daten in einem std::map ablegen leider kann ich die daten nicht abrufen frage kann std::map in einer class auf rufen.

    cgi.cpp

    query.insert(make_pair(schluessel, wert));
    
    class cgi
    {
    private:
    string querystring;
    
    public:
    map<string,string> query;
    void request();
    void format();
    };
    
    cout << test1.query["test"] << endl;
    cout << test1.query["test1"] << endl;
    

    test und test1 sind werte von schluessel



  • class cgi
    {
        std::map<std::string, std::string> m_queries;
    
    public:
        std::string const& get_query_value(std::string const& key)
        { 
            std::map<std::string, std::string>::iterator it(m_queries.find(key)); 
            if (it == m_queries.end()) 
                throw std::runtime_error("key do not exist"); 
            return (*it).second; 
        }
    };
    

    ...

    std::clog << inst.get_query_value("foo") << std::endl;
    

    ...



  • Tuxist schrieb:

    wollte daten in einem std::map ablegen leider kann ich die daten nicht abrufen frage kann std::map in einer class auf rufen.

    Äh. Und wo ist die Frage bzw. Problembeschreibung?!



  • die daten werden in der std::map nicht gespeichert



  • zeig mal soviel code, dass man es nachvollziehen kann.



  • cgi lib

    void cgi::format()
    {
    	unsigned int len;
    	size_t pos = 0; 
    	size_t old_pos = 0; 
    	len = querystring.length();
    
    	while(querystring.find("+") != string::npos )
    		{
    			querystring.replace(querystring.find("+") ,1, " ");
    		};
    
    	while(pos < len) 
    		{ 
         			pos = querystring.find("&", old_pos);
    
    			 	if (pos == string::npos) 
    				pos = querystring.length();
    
    			string paar = querystring.substr(old_pos, pos-old_pos);
    
    			size_t eq_pos = paar.find("="); 
    
    			string schluessel = paar.substr(0, eq_pos);
    
    			string wert = paar.substr(eq_pos+1);
    
      			query.insert(make_pair(schluessel, wert));
    
    			old_pos = pos+1; 
           		}
    
    }
    

    header

    class cgi
    {
    private:
    	string querystring;
    
    public:
    
    	std::map<string, string> query;
    	bool request();
    	void format();
    };
    

    programm

    int main()
    {
    html test;
    cgi test1;
    test.starthtml("TEST1");
    
    test.startform("POST", "test");
    test.formselect("test","<option>Moin</option> <option> Tach </option> <option> guten tag </option>");
    test.formselect("test1","<option>Schüss</option> <option> Bye </option> <option> Auf wiedersehen </option>");
    test.input("Schicken", "submit");
    test.endform();
    
    test1.request();
    test1.format();
    
    cout << test1.query["test"] << endl;
    cout << test1.query["test1"] << endl;
    
    test.endhtml();
    }
    


  • Bist du dir sicher, dass die Ausführung überhaupt in die Schleife hile(pos < len) reinspringt? Setz doch ,aö nen Breakpoint rein, wenn der dein Programm nicht stoppt, weißte woran es liegt 🙂



  • Ich festgestellt das das insert außerhalb der schleife klappt.
    habe gestest ob die schleife funktioniert in dem ich mit cout den string schluessel und wert ausgegeben habe und es hat geklappt.

    void cgi::format()
    {
    	unsigned int len;
    	size_t pos = 0; 
    	size_t old_pos = 0; 
    	len = querystring.length();
    
    	while(querystring.find("+") != string::npos )
    		{
    			querystring.replace(querystring.find("+") ,1, " ");
    		};
    
    	while(pos < len)
    		{ 
         			pos = querystring.find("&", old_pos);
    
    			 	if (pos == string::npos) 
    				pos = querystring.length();
    
    			string paar = querystring.substr(old_pos, pos-old_pos);
    
    			size_t eq_pos = paar.find("="); 
    
    			string schluessel = paar.substr(0, eq_pos);
    
    			string wert = paar.substr(eq_pos+1);
     			query.insert( make_pair(schluessel ,wert));
    			old_pos = pos+1;
           		};
    }
    
    void cgi::getdata( string formname )
    {
    	Query::iterator iter = query.find(formname);
    		if( iter != query.end() ) 
    		{
    		cout << "Formname" << iter->first << "value" << iter->second << endl;
    		}
    
    		else
    		cout << "Failure" << endl;
    }
    
    #include <iostream>
    #include <string>
    #include <sstream>
    #include <vector> 
    #include <map>
    #include <stdexcept>
    
    using std::vector;
    using namespace std;
    
    class cgi
    {
    private:
    	string querystring;
    
    public:
    	typedef std::map< string, string > Query;
    	Query query;
    	bool request();
    	void getdata( string formname );
    	void format();
    };
    
    class html
    {
    private:
    
    public:
    void starthtml(string sitename);
    void endhtml();
    void startform(string methodform, string name);
    void endform();
    void input( string submitlabel, string type);
    void formselect(string formselectname, string formselectinput);
    void createlayer(string layerid);
    void endlayer();
    };
    
    int main()
    {
    html test;
    cgi test1;
    test.starthtml("TEST1");
    
    test.startform("POST", "test");
    test.formselect("test","<option>Moin</option> <option> Tach </option> <option> guten tag </option>");
    test.formselect("test1","<option>Schüss</option> <option> Bye </option> <option> Auf wiedersehen </option>");
    test.input("Schicken", "submit");
    test.endform();
    
    test1.request();
    test1.format();
    
    test1.getdata("test");
    test1.getdata("test1");
    
    test.endhtml();
    }
    

Anmelden zum Antworten