当结构体中有map成员变量的时候,不能进行初始化,否则在插入操作的时候,会出现异常。
eg:
typedef struct {
int match[200];
}LocMatch_DEF;
/* here string contains item */
typedef map<string, LocMatch_DEF> MAP_Loc_DEF;
typedef struct {
MAP_Loc_DEF MyLoc;
}MyMAPLoc_DEF;
/* here string contains subnode */
typedef map<string, MyMAPLoc_DEF> MAP_LocMatch_DEF;
下面是具体调用的过程。
MAP_CDR_FILE_DEF::iterator iterfile;
iterfile = mapCdrFile.begin();
SqStack S;
InitStack(&S);
for(; iterfile!=mapCdrFile.end(); iterfile++)
{
LIST_FIELD_DEF::iterator iterfield;
string tempstr;
tempstr.assign((*iterfile).first);
iterfield = mapCdrFile[(*iterfile).first].listCDRField.begin();
MyMAPLoc_DEF MymapLoc;
MAP_Loc_DEF maploc;
// memset(&MymapLoc, 0 ,sizeof(MymapLoc));
/*此处不能初始化,因为结构体中是map,如果初始化,程序会不过,切记,切记。 */
for(;iterfield!=mapCdrFile[(*iterfile).first].listCDRField.end();iterfield++)
{
string MystrTemp;
string strmp;
strmp.assign(*iterfield);
char *Str;
int iLen = 0;
int iRet = 0;
LocMatch_DEF LocMatch;
memset(&LocMatch, 0 ,sizeof(LocMatch));
MystrTemp.assign(mapCdrFile[(*iterfile).first].mapCDRField[(*iterfield)]);
Str = (char *)MystrTemp.c_str();
iLen = MystrTemp.size();
iRet = BackMatch(&S, Str, iLen, LocMatch);
if(iRet != OK)
{
Clear(&S);
return NOTMATCH;
}
maploc.insert(pair<string,LocMatch_DEF>((*iterfield), LocMatch));
MymapLoc.MyLoc=maploc;
}
mapLocMatch.insert(pair<string,MyMAPLoc_DEF>((*iterfile).first, MymapLoc));
}
Clear(&S);