使用整数作为具有枚举键的地图中的键

时间:2013-01-29 13:34:09

标签: c++ map stl enums key

 enum aaa {a, b, c};

 std::map <aaa, int> container;

 container[0]; //compilation error

我知道在这种情况下容器是空的,我会得到段错误,但这不是问题。枚举是算术类型,为什么会出现问题?

4 个答案:

答案 0 :(得分:6)

你两个都错了。 :)

int无法隐式转换为enum需要显式转换,并且您不会遇到段错误,因为container[0]会value-初始化地图中的新值。

答案 1 :(得分:1)

容器的密钥类型为aaa0的类型为int。 <{1}}不能隐式转换为int,因此会出现编译错误。

答案 2 :(得分:1)

编译器期望密钥为aaa类型。所以你需要写container[a]而不是你做的。

答案 3 :(得分:1)

对于std :: map的代码,你没有得到seg-fault,operator []在地图中插入一个新元素。

无论如何,如果你确定你在做什么,你必须将int转换为enum,但如果你这样做,你就可以不使用枚举(只是你的int并且你已经完成了),所以更好的解决方案是直接使用枚举,只有在你别无选择时才会涉及演员阵容。