STL Map Initialization



  • Hallo!

    weißt jemand wie kann man ein map in Visual C++ initializieren? (ohne die pop/push Funktionen natürlich)

    ich habe das hier schon ausprobiert:

    pair<string, int> pa[] =
        {
            pair<string,int>("one", 1),
            pair<string,int>("two", 2),
            pair<string,int>("three", 3),
        };
    
    map<string, int> object(&pa[0], &pa[3]);
    

    geht wunderbar mit gcc aber sturtz ab mit MSVC. Ideen? Vielen Dank



  • pa[3] dereferenziert bereits eine Adresse außerhalb des Arrays. Auch wenn Du darauf wieder den Adressoperator anwendest, ist das ungültig. (&pa[0])+3 sollte es aber tun.



  • ...oder aber:

    map<string, int> object(pa, pa+3);
    


  • HumeSikkins schrieb:

    ...oder aber:

    map<string, int> object(pa, pa+3);
    

    Warum so einfach...? 🤡 👍



  • Es geht nur bei g++. Bei Visual C++ geht es immer noch nicht 😞

    Die Fehlermeldung:

    :\tmp\c\tests\test1.cpp(13) : error C2664: '__thiscall std::map<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,int,struct std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >,class std::allocator<int> >::std::map<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,int,struct std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >

    ,class std::allocator<int> >(const struct std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > &,const class std::allocator<int> &)' : Konvertierung des Parameters 1 von 'struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,int> [3]' in 'const struct std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > &' nicht moeglich
    Ursache: Konvertierung von 'struct std::pair<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,int> [3]' in 'const struct std::less<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > >' nicht moeglich
    Quelltyp konnte von keinem Konstruktor angenommen werden, oder die Ueberladungsaufloesung des Konstruktors ist mehrdeutig

    Und der ganze Code

    #include <iostream>
    #include <map>
    
    using namespace std;
    
    pair<string, int> pa[] =
        {
            pair<string,int>("one", 1),
            pair<string,int>("two", 2),
            pair<string,int>("three", 3),
        };
    
    map<string, int> object(pa, pa+3); 
    
    main()
    {
    	cout << "testchen\n";
    }
    


  • Scheinbar hat die Map-Implementierung unterm VC++ keinen Range-Konstruktor oder kennt keine Member-Templates (oder beides). Ist das VC++6? Dann würde ich mir da nix draus machen und das 7er nehmen, falls vorhanden. Anderenfalls musst Du wohl über eine Schleife einfügen.


Anmelden zum Antworten