c++ - 在不占用内存的情况下读取文本文件的最佳方法

标签 c++ arrays memory-management vector

阅读文本文件的最佳方式是什么?例如,我有一个包含数百本书的文本文件。在这些书下将是作者等一些作者可以有多本书。

我将如何编写这个程序,以便它在搜索或查找信息时不会将整个文件读入内存(数组、 vector 等)。假设我输入作者姓名,它会找到他们写的每一本书。所以我很好奇最好的方法和最有效的方法。

我会用 C++ 编写代码

最佳答案

基本答案是 FileStream。因此,您在磁盘上的文件中寻找一个位置,然后从那里读取。但是,此时您将非常受磁盘 io 限制,并且您的文件必须符合某种结构,除非您希望每次查找内容时都必须从头到尾读取。也就是说,它必须按照作者的顺序,即使可以接受也可能意味着通过它搜索其他任何东西都将非常低效。

解决您问题的经典方法是索引文件。 所以 books.dat 将是一个相关的 authors.idx,它会说是作者和标题的列表,最好按作者排序。 然后你有 titles.idx,它是书名和书在 books.dat 中的开始位置。 文件中的下一个标题将为您提供本书的长度。

当然,您必须维护这两个文件。如果应用程序不编辑文件,那么使用工具 uo 来创建您需要的索引将是一个不错的方法。

关于c++ - 在不占用内存的情况下读取文本文件的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12326008/

相关文章:

c++ - 为什么这个线程不知道它是谁?

c++ - 如何使用集合中的元素键删除 map 中的元素?

c++ - 编译器错误 : 'area' not declared in this scope

python - 测试 numpy ndarray 中是否存在列表?

c++ - 将二维数组传递给函数以更改值

C++ 和 WinApi - 使用 GetWindowText() 获取 C++ 代码的参数

c - 在 C 中将字符与表指针交换

C++ 可能的内存泄漏读取文件

java - JVM 创建 CSV 文件并即时压缩所需的内存

objective-c - 在子类的子类中实现 NSCopying