[英]How to elegantly put all enums into a std::set
我有一个枚举,我想将它们全部放入集合中(然后使用set_intersection算法将其删除,但这是题外话)。 除了Im停留在步骤1之外,所有工作都很好。
如果我有(真实类具有较高基数的枚举)
class MyClass
{
enum Color{red, green , blue}
};
我将如何初始化std::set<MyClass::Color>
包含所有枚举。
很明显,我可以手动将它们一个接一个地插入,使用强制转换进行for循环,因为它们是连续的并且从0开始(我认为如果在枚举定义中不使用=,则是必需的),但是我正在寻找一种更优雅的方法。
编辑:如果可能的话,我更喜欢C ++ 03解决方案,因为当前的问题实例需要它,但是如果不是,C ++ 11也很高兴知道。
这是一个选择:
#define COLORS {red, green , blue}
enum Color COLORS;
static std::set<Color> color_set() {
return COLORS;
}
#undef COLORS
使用std::bitset< total_colors >
。 对于有限空间上的集合而言,这是更合适的数据结构。 每种颜色都映射到一个布尔值,表示它是否是集合的一部分。 您可以使用my_bitset.set()
将其初始化为所有true
。
就我个人而言,我会使用循环,然后随心所欲地进行投射。
但是,如果您对强制转换一无所知,则可以在枚举上定义运算符,以便可以使用++
对其进行迭代。 这样,您可以循环播放而无需强制转换。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.