涉及Bool设置的c++优化

C++ Optimization Involving Bool Settings

本文关键字:c++ 优化 设置 Bool 涉及      更新时间:2023-10-16

好的,所以我正在寻找"最好的方法"来解决这个问题。

我有一堆设置的布尔值,我想更简洁地存储和访问它们。

 -- 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已经为此构建了一些东西。