以下是我的情景:
我正在使用大型 2D动态数组来存储具有以下属性的元素:
int
vector
现在,随机访问数组元素。因此,对元素的时间访问会发生很大变化。
我希望时间访问元素很小,并且对所有种质都是常量。
动态数组最适合我的场景吗?
我尝试使用boost的unordered_map,但与动态数组相比,似乎无序映射需要更多时间来访问元素。
请提出建议:
代码:
代码:
for( counter1=0; counter1< sizeof(chunk1); ++counter1)
{
//code lines skipped
IndexEntries &data=IndexTable[chunk1[counter1]][chunk1[counter1+1]];
DoubleTableEntries &GetValue=NewDoubleTable[NextState_chunk1][data.index];
NextState_chunk1= GetValue.Next_State;
++Bcount;
buffer[ Bcount]=NextState_chunk1;
++counter1;
// Code lines skipped
}
这里NewDoubleTable是我从中随机访问元素的2d数组。
答案 0 :(得分:1)
对于随机访问,没有什么可以击败阵列(动态或非动态)。只有这种数据结构平均提供O(1)访问时间,因为它使用连续的内存。
答案 1 :(得分:1)
在速度方面没有任何东西可以击败阵列访问,像unordered_map<>
这样的所有更高级别的容器都会增加额外的工作。当您可以使用普通数组或vector<>
时,这总是最快的。
只有当您的密钥空间稀疏,由于空间考虑而禁止使用普通数组/向量时,才需要unordered_map<>
。在这种情况下,unordered_map<>
可以将稀疏键空间中的键转换为哈希索引到紧密填充的哈希表中,而哈希表又不过是一个数组。