在C++中存储多维数据的最佳方式是什么?我正在寻找一些动态数据结构,而不是静态多维数组,因为要存储在结构中的元素数量无法预先确定。
此外,我正在寻找一种可以最大限度地降低内存成本并提供更快查找的数据结构。有现成的数据结构吗?或者我必须实现一些基于多维树的数据结构?
编辑:我必须在一些数据结构中存储多维流数据。例如,数据流的形式为:(key1,key2,key3,value1。。。
稍后我想搜索关于不同关键字的数据。
我必须在一些数据结构中存储多维流数据。例如,数据流的形式为:。。。
稍后我想搜索关于不同关键字的数据。
boost::multiindex
允许将不同类型的索引添加到容器中。
这是一个非常复杂的库,习惯它可能会有点痛苦。但这是值得的,因为它解决的问题非常常见。
如果您只需要快速查找和内存效率,请考虑使用哈希表(例如STL哈希表:std::unordered_set<std::vector<int>>
(。
这将允许您在消耗O(n)
内存的同时,在分摊的O(1)
时间内进行插入、删除和查找。
要使用std::unordered_set
,我们应该提供一个散列函数,而std::hash<std::vector<T>>
没有定义。这种方法的使用示例(包括一些不可怕的散列函数(可以在这里找到。
正如@BiagioFesta所提到的,这段代码显示了O(D)
的时间复杂性,其中D
是维度的数量,因为每个操作都会计算散列,这需要O(D)
的时间。这可以通过在元素内部存储散列来加速。