Probleme mit Map..



  • Hallo, will eine Map mit eindeutigen Schlüssel als std:string, jeder schlüssel enthält eine liste !

    Beim einfügen eine listenelements mit entsprechenden key, muss gecheckt werden ob key schon existiert. Wenn nein key erstellen und eelemnt in liste anfügen!

    Aber komm damit nich zurecht..

    //MAP mit Liste
    std::map<std::string,std::list<UINT> > m_Groups;
    
    //anfügen
    void addMod(std::string strGroup,UINT iModul){
    
    		//Wenn Schlüssel nich gefunden wurde, dann anlegen
    		if(m_Groups.find(strGroup) == m_Groups.end())
    			m_Groups.insert(std::pair<strGroup,iModul);
    
    		//Anfügen 
    		m_Groups[strGroup].push_back(iModul);
    
    	}
    


  • Was funktioniert daran denn nicht? Und ich glaube du musst einen Schlüssel nicht anlegen, der wird beim ersten Zugriff darauf angelegt. Also kannst du imho den "//Wenn Schlüssel nich gefunden wurde, dann anlegen"-Teil weglassen 🙂



  • Ich glaube du meinst sowas:

    std::map<std::string, std::list<UINT> >:: iterator it;
    it = m_Groups.find(strGroup);
    if(it == m_Groups.end())
       m_Groups[strGroup] = std::list<UINT>();
    it->second.push_back(iModul);
    


  • Es kommen tausend "error C2784:" 'bool std::operator <(const............

    Fehler und

    c:\Programme\Microsoft Visual Studio .NET 2003\Vc7\include\functional(139): error C2676: binary '<' : 'const std::string' does not define this operator or a conversion to a type acceptable to the predefined operator



  • #include <string>
    

    vergessen?



  • da kommen die gleichen fehler;)



  • m_Groups.insert(std::pair<strGroup,iModul);
    

    Mir fällt da ein < anstatt einer ( auf...



  • @MFK: ohman .. aber echt.. dachte ich hab schon irgendwo anders string verwendet:) Das kommt davon wenn man an mehren projekten gleichzeit arbeitet;)



  • Das hier wird bei mir ohne Fehler kompiliert:

    #include <map>
    #include <list>
    #include <string>
    
    typedef unsigned int UINT;
    
    std::map<std::string,std::list<UINT> > m_Groups;
    
    //anfügen
    void addMod(std::string strGroup,UINT iModul)
    {
        //Anfügen
        m_Groups[strGroup].push_back(iModul);
    }
    
    int main()
    {
    }
    

    Kannst du ein Minimalbeispiel liefern, das deinen Fehler reproduziert?



  • m_Groups.insert(std::pair<strGroup,iModul);
    

    Die Zeile ist ein einziger Syntax-Fehler - wenn du std::pair verwendest, mußt du dahinter auch die Typen angeben (in <...> Klammern) - alternativ könntest du auch make_pair nehmen. Und eine implizite Umwandlung von int nach list<int> gibt es auch nicht.



  • danke jung;) MFK hatte recht mit dem std::string vergessen;) es klappt wunder bar THX


Anmelden zum Antworten