我有 3 个文件。F1,F2,F3。F1 是具有 200K 条目的主文件。F2 和 F3 可以包含超集或条目的子集(300K 或 100K)。我的目标是得出 F1 中不在 F2 和 F3 中的条目列表。到目前为止,这就是我实现它的方式。
- 在 C++ STL 映射中加载 F1 条目。
- 开始阅读 F2。如果条目匹配,则减少计数(而不是从映射中删除)。计数 = F1 开始的大小。如果计数为 0,那么我知道 F1 中的所有条目都已在 F2 中找到,因此无需在 F2 中进一步遍历或遍历 F3。
- 我没有从我的地图中“删除”条目的原因是我读到 C++ STL 地图是一棵二叉树。看看我的条目,我的树绝对不可能是平衡的二叉树。这是一棵极深的树。因此,任何擦除操作都变得昂贵。查找操作也可能很昂贵,但擦除操作必须在每次删除时重新创建树。
- 所以现在的问题是我如何到达 F2 中存在的条目列表。我是否维护一个带有布尔标志“found = true or false”的结构?暗示在完成 F2 和 F3 之后,我会遍历整个 STL 映射 - 然后查找找到 = false 的值,然后开始将增量写入文件?
有什么聪明、有效的方法来做到这一点?