2

プログラムに問題があります。マルチマッピングを使用して、複数の右手の法則を左手の法則に配置する文法を読み込もうとしています。つまり、ルールは次のとおりです。a-> al be ze it map [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); 
    }
}
4

1 に答える 1

0

std::map複数の値を持つ単一の一意のキーが必要な場合は、次のような値のコンテナで使用できます。

std::map<std::string, std::vector<std::string> > rule;

それぞれ1つの値を持つ重複キーが必要な場合は、代わりに次std::multimapのように使用できます。

std::multimap<std::string, std::string> rule;

これによりrule、ペア、、を含める[a,al]ことができます[a,be][a,ze]

于 2012-10-10T03:37:10.487 に答える