我有一个枚举:
enum FlowType {
LEVEL_FLOW = 1,
PARTITION_FLOW = 3,
ORDERBOOK_EVENT_FLOW = 4
}
我想创建一个地图,以便在搜索上面的整数部分时,我必须返回“LEVEL_FLOW”部分。
我无法提出地图声明和插入声明。请帮忙。
这是我试过的:
std::map<int, FlowType > FlowsMap;
FlowsMap.insert(std::make_pair<1, FlowType.LEVEL_FLOW >);
答案 0 :(得分:3)
如果您想添加值:
typedef enum e
{
ONE = 1,
TWO = 2,
THREE = 3
} etype;
int main(int arc, char **argv)
{
std::map <etype, std::string> mmap;
mmap[THREE] = 3;
}
答案 1 :(得分:2)
如果LEVEL_FLOW
在同一范围内,您应该只使用FlowType.LEVEL_FLOW
而非enum
。否则,也请指定范围。
答案 2 :(得分:0)
插入时遇到的问题在于语法。你应该写:
FlowsMap.insert(std::make_pair(1, FlowType.LEVEL_FLOW));
// make_pair is a function (make_pair()), pair is a type (pair <>)
或者更好
FlowsMap[1] = LEVEL_FLOW;
不需要为地图中的值项重载比较运算符。此外,即使您的密钥是FlowType枚举,也不需要它。
但是我想知道你是否真的需要这个地图...当你可以在你的枚举类型中转换你的int:
int myInt = 1;
FlowType ft = static_cast<FlowType> (myInt);
唯一的问题是某些int没有关联的枚举值。您可以使用find()方法通过地图来阻止这种情况。如果您知道不会发生这种情况,可以考虑避免使用地图。
答案 3 :(得分:0)
请注意,您使用的是C风格的枚举。
如果您想坚持使用它们,可以通过将代码更改为:
来修复它 FlowsMap.insert(std::make_pair<1, LEVEL_FLOW >);
如果您希望枚举名称成为范围的一部分(就像您在示例中所做的那样),请查看this thread on C++-style enums。