替代大数据集的向量? C ++

时间:2013-06-17 22:30:02

标签: c++ search

我正在寻找一种数据结构,它保存数据,以便插入(如矢量)需要保存数百万个无符号长整数。关键是它需要具有比O(logn)更好的查找,因为它将针对相同大小的类似向量进行搜索。有没有像这样存在的东西?

如果我插入10,20,30然后遍历集合,我需要保证10,20,30的顺序。我的数据是一个字符串我转换成无符号长以减少内存使用,即反向解码。

编辑: 由于人们在问,我正在比较两个向量(两者都非常大)以获得差异。

小例子:

vector 1: 10 20 30 40 50 60

vector 2: 11 24 30 40 55 70 90

result:   30 40

3 个答案:

答案 0 :(得分:4)

我自己从未使用它,并且与最近的C ++版本功能相比可能已经过时了(最后一次更新是从2011年开始),但是STXXL是为一组容器和算法构建的。大量的数据。 它可能符合您的需求。

  

STXXL的核心是C ++标准模板的实现   用于外部存储器(核外)计算的库STL,i。即,    STXXL实现可以处理巨大的容器和算法   只适合磁盘的数据量。虽然接近STL   支持易用性和与现有应用程序的兼容性,   另一个设计优先事项是高性能。

     

STXXL的主要特点是:

     
      
  • 并行磁盘的透明支持。该库提供了基本并行磁盘算法的实现。 STXXL是唯一的   支持并行磁盘的外部存储器算法库。
  •   
  • 该库能够处理非常大的问题(测试高达几十TB)。
  •   
  • 提高计算机资源的利用率。外部存储器算法和数据结构的STXXL实现受益   I / O与计算重叠。
  •   
  • I / O量中的小常数因子。一个名为“流水线”的独特库功能可以节省超过I / O数量的一半   算法组件之间的流数据,而不是临时的   将它们存储在磁盘上。开发分支支持异步   执行算法组件,启用高级任务   平行度。
  •   
  • 由于外部存储器算法和数据结构的众所周知的STL兼容接口,缩短了开发时间。
  •   
  • STL算法可以直接应用于STXXL容器;此外,算法的I / O复杂性在大多数情况下仍然是最佳的   这些案件。
  •   
     

对于内部计算,来自MCSTL的并行算法   可选地使用libstdc ++并行模式,制作算法   本质上受益于多核并行性。

答案 1 :(得分:1)

哈希映射是一种比排序向量更快查找的方法。您必须具有c ++ 11支持才能使用它 http://www.cplusplus.com/reference/unordered_map/unordered_map/
为了保持数据的顺序,唯一的方法是在它旁边维护一个存储int的向量 在您开始使用它之前,您应该考虑如何使用此数据结构(访问模式)。还要考虑您将获得的数据可能是什么 这是同一件事http://www.boost.org/doc/libs/1_53_0/doc/html/unordered.html

的提升版

答案 2 :(得分:0)

我认为您应该使用的是unordered_map以及可能是订单的双向链接列表。

因此,每次向数据库添加新项时,首先将其添加到链表的前端(或末尾),然后将其添加到键值为(unsigned int)的hashmap中, “值”(来自键/值对)是指向链表中对象的指针。 所以现在如果你想要快速查找,你可以查看hashmap,如果你想按顺序迭代,你可以使用链表。 当然,当你想删除一个对象时,你必须从两者中删除它们,但复杂性方面它是相同的(O(1)为所有东西摊销)。

与使用hashmap相比,这当然会使你的内存增加2或3。