使用多重映射

时间:2012-10-10 02:28:39

标签: c++ multimap

嘿伙计们,我的程序有问题,我正在尝试使用多重映射将多个右手规则放入左手规则中。问题是,让我们说规则是: 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); 
    }
}

1 个答案:

答案 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]