映射带值的enum,但不使用两次enum

  • 本文关键字:enum 两次 映射 c++ enums
  • 更新时间 :
  • 英文 :


我有一个类似这样的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)));
}

在线演示

最新更新