内置的碰撞过滤器组和掩码不足以存储我的碰撞过滤器回调所需的信息。
我必须使用哈希表来存储我的碰撞数据,并且由于 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 会影响性能吗?