繁体   English   中英

如何优雅地将所有枚举放入std :: set

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM