c ++:随机访问动态数组

时间:2014-04-30 04:43:37

标签: c++ arrays stl

以下是我的情景:

我正在使用大型 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数组。

2 个答案:

答案 0 :(得分:1)

对于随机访问,没有什么可以击败阵列(动态或非动态)。只有这种数据结构平均提供O(1)访问时间,因为它使用连续的内存。

答案 1 :(得分:1)

在速度方面没有任何东西可以击败阵列访问,像unordered_map<> 这样的所有更高级别的容器都会增加额外的工作。当您可以使用普通数组或vector<>时,这总是最快的。

只有当您的密钥空间稀疏,由于空间考虑而禁止使用普通数组/向量时,才需要unordered_map<>。在这种情况下,unordered_map<>可以将稀疏键空间中的键转换为哈希索引到紧密填充的哈希表中,而哈希表又不过是一个数组。