在具有枚举键的映射中使用整数作为键

Using integers as key in map which has enum key

本文关键字:整数 映射 枚举      更新时间:2023-10-16
 enum aaa {a, b, c};
 std::map <aaa, int> container;
 container[0]; //compilation error

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

你在这两方面都错了。 :)

int不能隐式转换为enum,需要显式强制转换,并且您不会得到段错误,因为container[0]会在映射中值初始化一个新值。

容器的密钥类型为 aaa0的类型是 int . int不能隐式转换为aaa,因此你会得到一个编译器错误。

编译器

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