【发布时间】:2012-08-29 16:30:25
【问题描述】:
我有大量记录,比如大约 4,000,000 条,我想反复处理它们并将信息放入与该记录链接的类中。我不确定我应该使用什么样的数据结构?我应该使用向量、映射还是哈希映射。我不需要插入记录,但我需要读取一个包含这些记录编号(或名称)集的表,然后获取一些链接到该记录的数据并对它们进行一些处理。地图上的发现是否足够快以至于不能在这个例子中使用哈希图?记录有一个类作为它的结构,并且我之前没有做过任何使用以类作为其值的映射或哈希映射(如果可能的话)。 在此先感谢各位。
已编辑:
我暂时不需要将所有的记录同时保存在内存中> 我需要先给它一个结构,然后从一些记录中获取数据。记录总数约为 2000 万条,我想读取这些原始记录中的每一个,然后如果它的基本信息不存在于我想要创建的新地图或矢量中,并将其余数据作为一个向量。因为我有 2000 万条记录,我认为每条记录都要经过 400 万条记录才能找到该记录的基本信息是否存在,这将是非常痛苦的。我有大约 400 万个类型的包,每个包都可以有不止一种类型的服务(每个包大约 5 (20/4) 个)。我想读取这些记录中的每一个,然后如果包 ID 不存在到向量中或我想使用的任何内容中,然后将基本信息推送到向量中,然后将与该包相关的服务保存在向量中在包类里面。
【问题讨论】:
-
这是一个很好的链接(其中一个):stackoverflow.com/questions/5139859/…。不管它值多少钱,听起来“地图”可能最适合您的需求。恕我直言...
-
这里没有足够的细节来确定答案 - 这些结构中的任何一个都可能是合适的。您如何查找此列表中的记录?您是否需要一次将它们全部加载到内存中?你能详细说明一下用例吗?
-
我不确定我是否理解您想要做什么。如果您可以简要列举您需要的所有操作,这可能会有所帮助......如果您想在固定大小的数据集上以最小的开销快速检索,请选择 std::array。如果大小是可变的,则选择 std::vector。如果您需要以某种方式订购的东西,请选择 std::map (如果 ID 可以出现多次,则选择 std::multimap )。如果不需要排序,也可以使用std::set,具体取决于数据的结构。
-
您所描述的内容听起来像是关系数据库的工作。否则,考虑到您想要快速查找(用于“链接”记录彼此),您可能想要使用哈希表,即
unordered_map。 -
不,我暂时不需要将所有的记录同时保存在内存中> 我需要先给出一个结构,然后从一些记录中获取数据。记录总数约为 2000 万条,我想读取这些原始记录中的每一个,然后如果它的基本信息不存在于我想要创建的新地图或矢量中,并将其余数据作为一个向量。因为我有 2000 万条记录,我认为每条记录都要经过 400 万条记录才能找到该记录的基本信息是否存在,这将是非常痛苦的。