我有一个类似这样的enum类:
enum Type{ First, Second, Third};
我需要将它们映射到一些值,例如:
std::map<Type, std::pair<int, float>> mp{
{First, std::make_pair(1, 8.)},
{Second, std::make_pair(5, 2.)},
{Third, std::make_pair(3, 7.)}
};
这种方法的问题是,当我想向枚举添加新值时(假设元素'Fourth'),我必须更新枚举类型和映射。如何解决这个问题?
您可以在运行时而不是在编译时填充map
,例如:
enum Type{ First, Second, Third, NumberOfTypes };
std::map<Type, std::pair<int, float>> mp;
...
// during program startup...
for(int i = First; i < NumberOfTypes; ++i) {
mp.emplace(static_cast<Type>(i), std::make_pair(i, static_cast<float>(i)));
}
在线演示