map<string, map<string, int>> foo;
... skulle være korrekt. Tror jeg. :b
Tak for svaret.
Det har jeg også forsøgt med (eller det var faktisk map<CString,map<CString,int> >), men det virker ikke rigtigt. Men måske jeg ikke har inkluderet det rigtigte. Hvad skal jeg inkludere, for at bruge map<,> ?
Det ser ikke umiddelbart ud til, at map kan genkendes. Er det en del af standard MFC?
Jeg har primært forsøgt med CMap og CTypedPtrMap, men har ikke kunnet finde en kombination af argumenter, der kan få det til at virke...
Hold dig fra at bruge MFC ting, hvis du lige så godt kan bruge komponenter fra standard biblioteket.
CString er f.eks. en MFC ting, der kun kan bruges med MFC og VisualC++. MFC har aldrig været godt og er forlængst forældet.
For at bruge map fra standard biblioteket skal du inkludere filen map
Og skrive:
using namespace std;
Og du skal huske at have mellemrum mellem > >
Jeg kan desværre ikke fortælle dig hvordan det virker i MFC. Jeg har faktisk aldrig nogensinde været uheldig nok til at skulle arbejde med det. :)
... og det er korrekt som bertel siger, husk mellemrum. :b
STL version er nem:
#include <iostream>
#include <string>
#include <map>
using namespace std;
int main()
{
map<string, map<string,int> > m;
m["a"]["1"] = 1;
m["a"]["2"] = 2;
m["b"]["1"] = 3;
m["b"]["2"] = 4;
cout << m["b"]["1"] << endl;
return 0;
}
MFC er noget mere tricky. Jeg forsøgte også med CMap og den var ikke specielt samarvejdsvillig.
Jge kunne dog få CMapStringToPtr til at gøre som jeg ville ved at tilføje en gazillion casts.
Kode:
#include <afxwin.h>
#include <iostream>
using namespace std;
int main()
{
CMapStringToPtr m;
int vals[] = { 1, 2, 3, 4 };
m["a"] = new CMapStringToPtr();
(*(CMapStringToPtr*)m["a"])["1"] = &vals[0];
(*(CMapStringToPtr*)m["a"])["2"] = &vals[1];
m["b"] = new CMapStringToPtr();
(*(CMapStringToPtr*)m["b"])["1"] = &vals[2];
(*(CMapStringToPtr*)m["b"])["2"] = &vals[3];
cout << *(int*)(*(CMapStringToPtr*)m["b"])["1"] << endl;
return 0;
}
Så skal man notere sig at MFC CMap* klasserne svarer til .NET Hashtable og Dictionary<>.
Det gør STL map ikke. STL map er ordnet - lad os kalde det for en tree map, mens MFC CMap* og .NET klasserne er en hash map.
Jeg tvivler dog på at det vil gøre nogen forskel for dig.
Med hensyn til forældelse, så kan man argumentere for at udvikling af GUI i C++ på Windows har været forældet siden 2002 da MS releasede .NET, men man kan også argumentere med at MFC stadig udvikles (version 10.0 skulle udkomme om en måned) og der er nogle endda meget store apps som stadig udvikles i MFC.
Ja undskyld mit sene svar, lægger I nogle svar?