Probleme mit map funktion "insert"



  • map<string, string> Studmap;
    	map<string, string>::iterator it = Studmap.begin();
    
             /*string m;
    	string n;
    	cout<<"Bitte geben Sie die Martikelnummer ein: ";
    	cin>>m;
    	cout<<"\nBitte geben Sie den Namen ein: ";
    	cin>>n;
    	pairs.insert(Studmap::value_type(m,n));*/
    
    	Studmap.insert(pair<string, string>("Frankfurt","1234"));
    	Studmap.insert(pair<string, string>("Paris","hello"));
    	Studmap.insert(pair<string, string>("Istanbul","hello"));
    
             for(it=Studmap.begin(); it!=Studmap.end(); it++){
    
    		cout<<(*it).first<< "    "<<(*it).second<<endl;
    	}
              //cout<<"Hier wird nach scheiss name gesucht und ausgegeben"<<endl;
    	//cout<<Studmap["Frankfurt"]<<endl;
    
    }
    

    Hallo
    wie kann man per tastatur eingabe in die map einfügen.
    so bekomme ich das hin:
    Studmap.insert(pair<string, string>("Frankfurt","1234"));
    aber wie geht das per tastatur eingabe,habe das versucht in meinem code doch das funktioniert nicht habe es ausgeklammert

    danke für eure hilfe



  • manuela28 schrieb:

    map<string, string> Studmap;
    	map<string, string>::iterator it = Studmap.begin();
    	
             string m;
    	string n;
    	cout<<"Bitte geben Sie die Martikelnummer ein: ";
    	cin>>m;
    	cout<<"\nBitte geben Sie den Namen ein: ";
    	cin>>n;
    [b]         Studmap[m] = n;[/b]
    	//pairs.insert(Studmap::value_type(m,n));
    
    	Studmap.insert(pair<string, string>("Frankfurt","1234"));
    	Studmap.insert(pair<string, string>("Paris","hello"));
    	Studmap.insert(pair<string, string>("Istanbul","hello"));
    	
             for(it=Studmap.begin(); it!=Studmap.end(); it++){
    	
    		cout<<(*it).first<< "    "<<(*it).second<<endl;
    	}
              //cout<<"Hier wird nach scheiss name gesucht und ausgegeben"<<endl;
    	//cout<<Studmap["Frankfurt"]<<endl;
    	
    }
    

    Hallo
    wie kann man per tastatur eingabe in die map einfügen.
    so bekomme ich das hin:
    Studmap.insert(pair<string, string>("Frankfurt","1234"));
    aber wie geht das per tastatur eingabe,habe das versucht in meinem code doch das funktioniert nicht habe es ausgeklammert

    danke für eure hilfe



  • hallo

    danke für die infos, aber habe ein weiteres Problem.

    Ich möchte gerne eine weitere Variable einfügen.
    Martikelnummer, Name und Note.

    map<string,string>.......

    wenn man in die map ein weiters Datentyp hinzufügt geht es nicht?

    Warum und wie wäre da die beste Lösung!
    Danke



  • manuela28 schrieb:

    hallo

    danke für die infos, aber habe ein weiteres Problem.

    Ich möchte gerne eine weitere Variable einfügen.
    Martikelnummer, Name und Note.

    map<string,string>.......

    wenn man in die map ein weiters Datentyp hinzufügt geht es nicht?

    Warum und wie wäre da die beste Lösung!
    Danke

    1. std::set kann in diesem Fall benutzt werden

    struct MyClass
    {
      std::string Martikelnummer;
      std::string Name;
      std::string Note;   
    
      bool operator<(MyClass &c) const
      {
        return Martikelnummer < c.Martikelnummer;
      }
    };
    
    std::set<MyClass> myset;
    

    2. std::map and struct

    struct MyClass
    {
      std::string Name;
      std::string Note;     
    
      MyClass(const std::string &Name, const std::string &Note)
        : Name(Name),
          Node(Node)
      {
      }
    };
    
    std::map<std::string, MyClass> myset;
    myset["126323"] = MyClass("Ivanov", "4");
    myset["dffdff"] = MyClass("Petrov", "2");
    

    u.s.w.

    3. std::map and std::pair

    std::map<std::string, std::pair<std::string, std::string> > myset;
    myset["126323"] = std::make_pair("Ivanov", "4");
    myset["dffdff"] = std::make_pair("Petrov", "2");
    

    u.s.w.



  • Weil eine map eben nur einen Schlüsseltyp und einen Wertetyp hat. Du musst den Rest in eine Struktur packen: nehmen wir an, die willst mit "Frankfurt" o.ä. noch mehr dinge assoziieren, dann geht das z.B. so:

    struct daten
    {
        string wert1;
        unsigned long wert2;
        string wert3;
        //...
    };
    
    typedef map<string,daten> m_map;
    
    int main()
    {
        m_map the_map;
        daten d;
        d.wert1=...;
        d.wert2=...;
        d.wert3=...;
        the_map["Frankfurt"]=d;    //Da es noch keinen Eintrag für "Frankfurt gibt, wird ein neuer erstellt
        cout<<the_map["Frankfurt"].wert1;    //Jetzt gibt es einen Wert für Frankfurt, dieser wird zurückgegeben...
    };
    


  • #include <iostream>
    #include <map>
    #include <string>
    
    using namespace std;
    
    void einfuegen();
    void einfuegenmap();
    void ausgeben();
    
    struct daten 
    { 
        string wert1; 
        string wert2; 
        string wert3; 
    
    	friend ostream& operator<<(ostream& output, const daten& S); 
    }; 
    
    typedef map<string,daten> m_map;
    //map<string,daten>::iterator it= m_map.begin();
    m_map the_map;
    
    int main()
    {
    
    	char auswahl;
    	while (auswahl != '0')
    	{
    	cout << "<1> Notenliste ausgeben" << endl;
    	cout << "<0> Ende" << endl;
    		cout<<"#######################################################\n";
    		cout<<"Bitte geben Sie die Funktion ein: ";
    		cin>>auswahl;
    		switch (auswahl)
    		{
    		case '1':
    			einfuegenmap();
                               ausgeben();
    
    			break;
    				case '0':
    			break;
    		default:cout << "Falsche Eingabe" << endl; 
    			break;
    		}
    	}
    
    	return 0;
    }
    
    void ausgeben()
    {	
    	m_map::const_iterator it;
    
    	for(it = the_map.begin(); it!=the_map.end();it++)
    	{
    
    		cout<<*it;
    
    	}
    };
    
    void einfuegenmap()
    {
    
        daten d; 
    	string m;
    	string n;
    	string s;
    
    	cout<<"Bitte geben Sie die Martikelnummer ein: ";
    	cin>>m;
    	cout<<"\nBitte geben Sie den Namen ein: ";
    	cin>>n;
    	cout<<"Note";
    	cin>>s;
    
        d.wert1=m; 
        d.wert2=n; 
        d.wert3=s;
    
    	the_map[m] = d;
    };
    
    ostream  &operator<<(ostream& output, const daten& S)
    
    {	//output<<" "<<endl;
    	output<<S.wert1<<" "<<S.wert2<<" "<<S.wert3<<endl;
    	return output;
    };
    

    Habe Problem bei der Ausgabe! Besser gesagt mit meineim ITERATOR

    Problemstellung: Wie krieg ich meine ganzen Studenten aus der map heraus?



  • Es wäre wirklich hifreich, wenn du die Fehlermeldung postest...



  • manuela28 schrieb:

    Problemstellung: Wie krieg ich meine ganzen Studenten aus der map heraus?

    #include <iostream>
    
    for(map<string, string>::const_iterator ci = theMap.begin();
        ci != theMap.end();
        ++ci)
        std::cout << ci->first << ": " << ci->second << "\n";
    

    ich hoffe, dass ich dich gerade richtig verstanden habe.

    mfg


Anmelden zum Antworten