好的,所以我正在寻找“最好的方法”来弄清楚如何解决这个问题。
我有许多设置的布尔值,并希望存储和访问它们更清洁。
-- 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])
这应该让我直接访问,保持大小相对较小(因为它是一个基于位的矢量),并具有我想要的分离。
答案 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
已为此构建了一些东西。