涉及Bool设置的C ++优化

时间:2016-09-03 19:19:53

标签: c++ optimization

好的,所以我正在寻找“最好的方法”来弄清楚如何解决这个问题。

我有许多设置的布尔值,并希望存储和访问它们更清洁。

 -- 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<bool> myVec;
if (myVec[SETTING_NAME1])

这应该让我直接访问,保持大小相对较小(因为它是一个基于位的矢量),并具有我想要的分离。

2 个答案:

答案 0 :(得分:5)

直接访问bool显然比通过地图或其他任何方式访问它更快。 然而,这不太可能永远对性能至关重要,差异可以忽略不计。

我建议不要担心所有的性能这样的事情,如果它干扰了一个iota编写最清晰的代码。担心这是浪费时间和过早优化,没有收获。您可以做的最佳事情是编写清晰易懂的代码,然后信任编译器优化器并花时间在性能关键区域优化代码(当然,通过分析确定,而不仅仅是直觉/猜测)会产生实际的差异。

答案 1 :(得分:0)

你可以做的是bitmap

long long int bitmask;或取决于你有多少布尔值。

然后你可以做像

这样的事情

bool checkMask(long long int bitmask, int check) { return bitmask & (1 << check) }  其中check类似于布尔值的索引,可以在enum class或w \ e中设置。

它绝对没有比使用直布泊更好的表现,但它为你提供了很好的管理大量布尔的方法。

您应该在线检查位掩码,我确定std已为此构建了一些东西。