删除C ++中的重复行

时间:2014-12-01 12:12:43

标签: c++ algorithm

我有一个包含以下结构的大文本文件:

001 002 3
001 003 4
002 001 3
002 005 2
...

第一列和第二列指定实体的ID,最后一列指定该对的频率。在上面的示例中,实体001002的对出现了两次:

001 002 3
002 001 3

我的问题:删除重复行的最合适(也是最有效)的方法是什么?我应该使用什么编程结构?

2 个答案:

答案 0 :(得分:3)

我想,unordered_map将数字哈希到使顺序无关紧要的事情上。

  1. 阅读两个ids
  2. 对它们进行排序
  3. 将它们组合成哈希键
  4. 当然,地图的价值是你的第三栏。

    如果您需要保留原始订单(我认为您不会),那么使用常规地图并合并没有散列的ID仍然是一种选择。

答案 1 :(得分:3)

这就是我解决问题的方法:

  • 在输入时,对前两个字符串进行排序,以便001 002002 001生成相同的字符串。
  • 将所有这些修改后的字符串存储在适合唯一元素的容器中,例如std::setstd::unordered_set。如果insert操作失败,则会有重复。

您当然可以在处理之前进一步解析输入字符串并将其视为数字。但只有在有关如何使用数据的更多信息可用时才能做出这一决定。