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 mehrdeutigUnd 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.