大型数据集的矢量替代方案?c++
Alternative to vectors for large data sets? C++
我正在寻找一种数据结构,它按其插入(如矢量)的顺序保存数据,需要保存数百万个无符号长。关键是它需要有一个比O(logn)更好的查找,因为它将针对相同大小的类似向量进行搜索。有这样的东西存在吗?
如果我插入10,20,30,然后遍历集合,我需要保证10,20,30的顺序。我的数据是一个字符串,我转换成一个unsigned long来减少内存使用,这是反向可解码的。
编辑:既然有人问了,我就把两个向量相互比较(两个向量的大小都很大)来得到差值。
小例子:
vector 1: 10 20 30 40 50 60
vector 2: 11 24 30 40 55 70 90
result: 30 40
我自己从未使用过它,与最近的c++版本功能相比,它可能已经过时了(上次更新是从2011年开始),但STXXL意味着一组容器和算法,为非常大的数据量而构建。它可能适合你的需要。
STXXL的核心是c++标准模板的实现库STL用于外部内存(核外)计算,即,STXXL实现了可以处理海量数据的容器和算法只能放在磁盘上的数据量。而与STL的接近度支持易用性和与现有应用程序的兼容性,另一个设计优先级是高性能。STXXL的主要特性有:
- 透明支持并行磁盘。该库提供了基本并行磁盘算法的实现。STXXL是唯一的支持并行磁盘的外部存储算法库。
- 库能够处理非常大的问题(测试到几十tb)。
- 提高了计算机资源的利用率。STXXL实现的外部内存算法和数据结构从中受益I/O和计算的重叠。
- I/O体积中的小常数因子。一个称为"流水线"的独特库特性可以节省超过一半的I/o数量在算法组件之间流式传输数据,而不是临时的将它们存储在磁盘上。开发分支支持异步执行算法组件,支持高级任务并行。
- 由于众所周知的外部内存算法和数据结构的stl兼容接口缩短开发时间。
- STL算法可直接应用于STXXL容器;此外,在大多数情况下,算法的I/O复杂度保持最优在这些案例中。
对于内部计算,从MCSTL或libstdc++并行模式可选地利用,使算法从多核并行性中获益。
哈希映射是一种比排序向量更快的查找方式。你必须支持c++11才能使用它。
http://www.cplusplus.com/reference/unordered_map/unordered_map/
为了保持数据的顺序,唯一的方法是在它旁边保留一个同时存储整型数的向量
在开始使用它之前,您应该考虑如何使用该数据结构(访问模式)。还要考虑您可能获得的数据是什么。
下面是boost版本的相同内容http://www.boost.org/doc/libs/1_53_0/doc/html/unordered.html
我认为你应该使用unordered_map结合也许是一个双链表的顺序。
因此,每次向数据库添加新项时,您首先将其添加到链表的前面(或末尾),然后将其添加到哈希映射中,其中键是值(unsigned int),"值"(来自键/值对)是指向链表中对象的指针。所以现在如果你想快速查找,你就在哈希表中查找,如果你想按顺序迭代,你就用链表。当然,当你想要删除一个对象时,你必须从两个对象中删除它们,但从复杂度上讲,它是相同的(O(1)平摊到所有对象)。
与使用hashmap相比,这当然会增加2到3的内存
- 运行同一解决方案的另一个项目的项目
- Project Euler问题4的错误解决方案
- 计算每个节点的树高,帮助我解释这个代码解决方案
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- visual c++,如何获取解决方案目录中的代码
- 有没有办法在远程设备上打开和编辑visual Studio 2017解决方案
- C++Matching Brackets 2解决方案不起作用
- 在 ubuntu3 上C++ goto 定义有什么解决方案吗16.04?
- C++11 中不同类型的对象的 std::array 的替代方案
- 在 leetcode 上提交解决方案时出现堆栈缓冲区溢出错误
- 别名模板的专业化 C++11 中没有开销的最佳替代方案
- 我的固定时间步长与增量时间和插值的解决方案是错误的吗?
- 无法在问题解决方案中执行输出逻辑
- 最大的回文产品 - 程序未运行,编写解决方案但无法理解问题
- 从预序遍历构造 bst 的 c++ 和 python 解决方案之间的区别
- 在一个解决方案中针对第三方静态库 (Creo) 的不同版本(版本)进行构建
- 如何巧妙地编写两个函数——一个用于检查是否存在解决方案,另一个用于获取所有解决方案
- 使用 Git 处理 C++ Visual Studio 2019 解决方案的外部依赖项源代码管理的最佳方法是什么?
- N-queen问题:无法弄清楚为什么我的解决方案不起作用
- 从排序数组中删除重复项,具有不同代码方式的相同解决方案具有不同的输出