在文本文件中查找子字符串的最快方法

时间:2009-08-07 04:55:49

标签: c++ algorithm text find path

在文本文件中查找字符串的最快方法是什么?案例场景:在文本文件中查找特定路径,列出大约50000个文件路径(每个路径都有自己的行)。

4 个答案:

答案 0 :(得分:2)

这个大小的文件应该很容易放在内存中,你可以把它变成一个std :: set(或者更好的是一个hashset,如果你手头有一个库),路径就是它的项目。检查确切路径是否存在将非常快。

如果你还需要寻找子路径,那么排序的std :: vector(如果你只是寻找前缀)可能是唯一有用的方法 - 或者如果你正在寻找完全一般的子串然后你需要扫描所有的矢量,但除非你必须这么做,即使这不会太糟糕。

答案 1 :(得分:2)

你是否必须在文件中找到一个字符串,在几个文件中重复使用相同的字符串,在同一个文件中找到几个字符串?

根据具体情况,您有几种可能的答案。

  • 如果你必须在同一个文件中找到几个字符串,那么构建一个数据结构(就像Alex提出的集合一样)很有用

  • 如果您必须搜索一个字符串,
  • 使用像Boyer-Moore这样的算法是有效的

  • 如果你必须搜索几个字符串,
  • 使用正则表达式引擎可能会更好。

答案 2 :(得分:0)

这是正则表达式的字段;你应该看看grep和awk。

答案 3 :(得分:0)

我不确定您希望使用搜索的范围,但FSM是很好的选择。

以下是讨论:Short example of regular expression converted to a state machine?