使用枚举值作为c ++中地图中的条目

时间:2013-11-29 08:41:50

标签: c++ enums

我有一个枚举:

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 >);

4 个答案:

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