【发布时间】:2016-08-27 13:54:14
【问题描述】:
我创建了一个应用程序,它可以在 Windows/Linux 上解析大约 300k 产品(每个产品都有自己的 70 个类别)的分隔文本数据库。该应用程序的目的是比较两个提供的文本文件(一个来自 ftp 和一个本地/当前文件)并使用任何更改更新本地文件(无论是更新单个产品字段,添加或删除产品),并保留一个这些更改的日志。
问题是这样的:有没有比二维向量更有效的方法?也许地图或成对的向量会更有效?基本上,比较将逐行、逐产品、逐类别进行。如果在两个列表中都找到匹配的条目,则检查该记录以确认它在两个列表中相同(否则更新),如果没有找到匹配的条目,则从本地列表中删除或添加丢失的产品(如果在本地列表,但存在于 ftp 上)。
所有这些上下搜索以及新成员的潜在删除/添加(顺序无关紧要,因此添加在本地 2d 向量的末尾被推回)似乎导致应用程序性能受到影响,所以我想知道是否有更有效的方法来解决这个问题。
注意:顺序不重要,不允许重复输入,本地向量将使用相同的分隔格式写回文本文件。后端 php 应用程序需要这种类型的文本/分隔格式。
感谢您的宝贵时间和任何建议。
【问题讨论】:
-
看起来像是数据库的工作,可能是一些 NoSQL 的东西。
-
在开始时调用
std::vector::reserve(),尤其是主向量,具有足够高的值,应该会提高push_back的性能。
标签: c++ vector text-parsing