大家好,我的程序有问题,我正在尝试阅读语法,使用多重映射将多个右手规则放入左手规则。问题是,假设规则是: a -> al be ze 它映射 [a, al] 并忽略其余部分。 单独留下 key ,我想为该 key 添加不同的属性。 想知道你们是否能发现一个我似乎找不到的错误。 我是否错误地使用了多重映射? 谢谢。
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);
}
}
最佳答案
如果您想要一个具有多个值的唯一键,您可以使用 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]
关于c++ - 使用多重映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12811127/