好的,所以我正在寻找"最好的方法"来解决这个问题。
我有一堆设置的布尔值,我想更简洁地存储和访问它们。
-- Current
bool MySetting1;
bool MySetting2;
bool MySetting3;
bool MySetting4;
.....
Accessed with
.....
if (MySetting1)
在这个例子中,我知道我的设置被称为什么,以及所有有趣的爵士乐。我已经考虑过的选项,环顾四周的地图和无序的地图和布尔向量…我只是在寻找最优化的做事方式。因为目前的方式…很好……在我看来,它只是不太干净。
enum myEnum
{
SETTING_NAME1 = 0,
SETTING_NAME2 = 0,
...
}
map<int,bool> myMap;
是否访问时间做myMap[SETTING_NAME1]相同的当前方法?它是直接访问还是需要查找?
我只是想更新一下,让大家知道我采取的策略。
我使用enum作为标识
enum myEnum
{
SETTING_NAME1 = 0,
SETTING_NAME2 = 1,
...
}
和vector来保存和调用数据
vector<bool> myVec;
if (myVec[SETTING_NAME1])
这应该给我直接访问,保持大小相对较小(因为它是一个基于位的向量),以及我想要的分隔。
直接访问bool值显然比通过map或其他方式访问bool值要快。然而, 不太可能是性能关键的,差异可以忽略不计。
我建议完全不要担心性能对于这样的事情,如果它干扰了编写尽可能清晰的代码。担心这是浪费时间和过早的优化没有任何好处。最好的方法是编写清晰易懂的代码,然后信任编译器的优化器,并花时间在性能关键区域优化代码(当然是由分析决定的,而不仅仅是直觉/猜测),这将产生实际的差异。
你能做的,是一个bitmap
。
long long int bitmask;
或取决于你有多少个布尔值
那么你可以写
bool checkMask(long long int bitmask, int check) { return bitmask & (1 << check) }
其中check类似于布尔值的索引,可以在enum class
或we中设置。
它的性能肯定不会比直接使用布尔值更好,但它提供了一些管理大量布尔值的好方法。
你应该在线检查位掩码,我相信std
已经为此构建了一些东西。