c++ - 使用多重映射

标签 c++ multimap

大家好,我的程序有问题,我正在尝试阅读语法,使用多重映射将多个右手规则放入左手规则。问题是,假设规则是: 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/

相关文章:

java - 在线性时间内迭代包含 List 的 Map

c++ - 多重映射如何在内部处理重复键?

具有任意索引的数组的 C++ 类

c++ - 具有不同参数 C++ 的工厂注册表

c++ - 使用 [[deprecated]] 时会发出 3 次警告

java - 如何访问 Guava 多重映射的所有值?

c++ - 在 C++ 中使用 multimap 的问题

c++ - std::nth_element 的 SIMD 实现

c++ - 在 Code::Blocks IDE 中为 GCC 链接多线程运行时

c++ - 编译器未完成进程