嘿伙计们,我的程序有问题,我正在尝试使用多重映射将多个右手规则放入左手规则中。问题是,让我们说规则是: a - >是泽 它映射[a,al]并忽略其余部分。 单独留下密钥,我想为该密钥添加不同的属性。 想知道你们是否能发现我似乎无法找到的错误。 我错误地使用多映射吗? 谢谢。
map<string, string> rule; // global var
void righthandside(){ // get rhs of grammar rule
char c;
skipSpace();
c = getchar();
if(isalpha(c)){
checkforE = false; // rule not epsilon
while(isalnum(c)){
righths += c;
c = getchar();
}
righths += '\0';
rule.insert(pair<string, string>(LHS[lhs], righths));
righths.clear();
righthandside();
}
else if(c == '#'){
if(checkforE == true)
rule.insert(pair<string, string>(LHS[lhs], epsilon)); // rule states NT goes to epsilon
skipSpace();
c = getchar();
if(c == '#'){ //end of file
cout << "end of file \n";
}
else{ // end of rule
ungetc(c, stdin);
lhs++;
readGR();
}
}
else{
errorcode(0);
}
}
答案 0 :(得分:0)
如果您想要一个具有多个值的唯一键,则可以将std::map
与容器一起使用,例如:
std::map<std::string, std::vector<std::string> > rule;
如果您希望每个具有一个值的重复键,则可以改为使用std::multimap
,如下所示:
std::multimap<std::string, std::string> rule;
允许rule
包含对[a,al]
,[a,be]
,[a,ze]