在C ++中存储多维数据的最佳方法是什么? 我正在寻找一些动态数据结构而不是静态多维数组,因为无法预先确定要存储在结构中的元素数量。
此外,我正在寻找一种数据结构,可以最大限度地降低内存成本并提供更快的查找速度。是否有现成的数据结构,或者我必须实现一些基于树的多维数据结构?
编辑:我必须在一些数据结构中存储多维流数据。例如,数据流的格式为:(key1,key2,key3,value1),(key1,key2,key3,value2),(key1,key2,key3,value3),...
稍后我想根据不同的密钥搜索数据。
答案 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
允许向容器添加不同类型的索引。
这是一个非常复杂的库,习惯它可能有点痛苦。但这是值得的麻烦,因为它解决的问题是一个非常普遍的问题。