C++ 映射为数组的问题

C++ 映射为数组的问题,c++,std,C++,Std,你好 我用C++做了非确定性有限自动机。我想做一张过渡桌。如您所知,它应该返回一组状态。例如,表[state][symbol]应该返回{q0、q1等..} 我正在为此使用std::map和std::set。我发现了这个有用的例子: 所以,我写了一些代码: std::map <set<state>, std::map<state,char> > transitionTable; 但是当我想把桌子弄到手的时候 设置结果=可传递[oldState][symbol]

你好

我用C++做了非确定性有限自动机。我想做一张过渡桌。如您所知,它应该返回一组状态。例如,表[state][symbol]应该返回{q0、q1等..}

我正在为此使用std::map和std::set。我发现了这个有用的例子:

所以,我写了一些代码:

std::map <set<state>, std::map<state,char> > transitionTable;
但是当我想把桌子弄到手的时候

设置结果=可传递[oldState][symbol]

我得到一个错误:

C:\NFA2\main.cpp||In function 'std::set<state, std::less<state>, std::allocator<state> > delta(state, char)':|
C:\NFA2\main.cpp|17|error: no match for 'operator[]' in 'transitionTable[oldState]'|
你能帮我吗


提前感谢。

根据您的描述,您似乎希望typedefs具有可读性:

typedef std::set<state> StateSet;
typedef std::map<char, StateSet> SymbolToStatesMap;
typedef std::map<state, SymbolToStatesMap> TransitionTable;

TransitionTable transitionTable;
地图类型应为:

std::map<A, std::map<B, C> >
std::map<std::set<state>, std::map<char,std::set<state> > transitionTable;
要真正能够使用自定义类型作为映射中的键,它们必须实现操作符我假设oldState是一个集合。如果是这种情况,transitionTable[oldState]将返回一个映射,如果symbol不是集合,则transitionTable[oldState][symbol]无效,因此会出现错误

std::map <set<state>, std::map<state,char> > transitionTable;
地图中有一个set as键,而不是状态。

旧状态和符号的类型是什么

从我对你问题的理解来看,我怀疑 transitionTable的名称应为:

std::map<A, std::map<B, C> >
std::map<std::set<state>, std::map<char,std::set<state> > transitionTable;
至少,这会给出映射:set_of_states,char-> 如果在示例中使用,则设置状态的状态,其中oldState为
一组状态,符号为字符。

请不要以使所有给定答案无效的方式编辑您的问题。如果您有更多问题,可以添加其他信息。谢谢。但是,在进行此更改之后,现在还有另一个错误:c:\program files\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.4.1\include\c++\bits\stl_function.h | 230 |错误:与'operator@Skyrocker:我猜state是一个自定义类型,您没有运算符,它是我的类型,但我不需要与它进行任何比较。但是状态是一个只有一个字符串字段的结构,所以我可以用字符串代替我的结构状态。我用字符串代替状态,它可以工作。非常感谢@天空:有关如何在地图中将自定义类型用作键的信息,请参见编辑。不,oldState是一个状态,而不是一个集合。