используя мультимаппинг

Эй, ребята, у меня проблема с моей программой, я пытаюсь читать в грамматике, помещая несколько правил для правой руки в правило для левой руки, используя мультимаппирование. Дело в том, что, скажем, правило таково:
a -> al be ze
он отображает [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);
}
}

2

Решение

Если вы хотите один уникальный ключ с несколькими значениями, вы можете использовать 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]

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]