内存和处理高效的多维数据结构C ++

时间:2016-08-08 11:10:05

标签: c++ performance memory multidimensional-array data-structures

在C ++中存储多维数据的最佳方法是什么? 我正在寻找一些动态数据结构而不是静态多维数组,因为无法预先确定要存储在结构中的元素数量。

此外,我正在寻找一种数据结构,可以最大限度地降低内存成本并提供更快的查找速度。是否有现成的数据结构,或者我必须实现一些基于树的多维数据结构?

编辑:我必须在一些数据结构中存储多维流数据。例如,数据流的格式为:(key1,key2,key3,value1),(key1,key2,key3,value2),(key1,key2,key3,value3),...

稍后我想根据不同的密钥搜索数据。

2 个答案:

答案 0 :(得分:1)

如果您需要快速查找和内存效率,请考虑使用哈希表(例如,STL one:std::unordered_set<std::vector<int>>)。

这将允许您在消耗O(1)内存时进行插入,删除和查找,最多分摊O(n)次。

要使用std::unordered_set,我们应该提供哈希函数,并且未定义std::hash<std::vector<T>>。可以找到使用此方法的示例(包括一些不太糟糕的哈希函数)here

正如@BiagioFesta所提到的,此代码显示O(D)的时间复杂度,其中D是多个维度,因为每个操作都会计算哈希值,这需要O(D)次。这可以通过在元素中存储哈希来加速。

答案 1 :(得分:1)

  

我必须在一些数据结构中存储多维流数据。例如,数据流的格式为:(key1,key2,key3,value),(key1,key2,key3,value),(key1,key2,key3,value),...

     

稍后我想根据不同的密钥搜索数据。

boost::multiindex允许向容器添加不同类型的索引。

这是一个非常复杂的库,习惯它可能有点痛苦。但这是值得的麻烦,因为它解决的问题是一个非常普遍的问题。