内置的碰撞滤镜组和蒙版不足以存储碰撞滤镜回调所需的信息。
我必须使用哈希表来存储我的碰撞数据,并且由于SIMD代码优化,btHashMap也包含在库中似乎是要走的路。
检查源代码我发现在btHashMap中搜索元素取决于存储元素的数量,所以它实际上不是O(1)而是O(n)。
Value* find(const Key& key)
{
int index = findIndex(key);
if (index == BT_HASH_NULL)
{
return NULL;
}
return &m_valueArray[index];
}
int findIndex(const Key& key) const
{
unsigned int hash = key.getHash() & (m_valueArray.capacity()-1);
if (hash >= (unsigned int)m_hashTable.size())
{
return BT_HASH_NULL;
}
int index = m_hashTable[hash];
while ((index != BT_HASH_NULL) && key.equals(m_keyArray[index]) == false)
{
index = m_next[index];
}
return index;
}
虽然该表将存储不超过10个元素,但以这种方式使用btHashMap会不会影响性能?