[英]Using enum value as a entry in a map in c++
我有一个枚举:
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 >);
如果要添加值:
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;
}
如果enum
在同一范围内,则应仅使用LEVEL_FLOW
而不是FlowType.LEVEL_FLOW
。 否则,也要指定范围。
您面临的插入问题在于语法。 您应该写:
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()方法在地图上防止这种情况。 如果您知道这种情况不会发生,可以考虑避免使用地图。
请注意,您正在使用C风格的枚举。
如果您要坚持使用它们,可以通过将代码更改为以下内容来解决此问题:
FlowsMap.insert(std::make_pair<1, LEVEL_FLOW >);
如果您希望枚举名称成为作用域的一部分(就像您在示例中尝试的那样),请查看C ++样式枚举上的该线程 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.