ifstream在没有内存使用情况下阅读的最佳方式

时间:2012-09-08 01:10:56

标签: c++ file input ifstream

我有一个文本文件,其中包含作者和作者撰写的书籍。我被分配编写程序,用户将提供作者的姓名。该程序必须打印该作者所写的任何书籍的名称。

我知道我应该使用ifstream来阅读这些信息。但是我怎么能这样做我的程序将整个文件读入内存(数组,向量等)以执行任何搜索查询?

最好的方法是什么?我的程序也应该使用类。

2 个答案:

答案 0 :(得分:4)

我不知道整个答案,甚至是语法,但是一个好的入门方法是你对输入文本文件的格式了解多少?它只是一个两列文件,如:[作者书]由一个共同的分隔符分隔?在这种情况下,您可以构造一个遍历整个文件的循环,并仅将条目存储到与搜索字符串匹配的向量中。

答案 1 :(得分:1)

这里有很多取决于你从文件中查找书籍的频率。如果你只想找一两个,那么最明智的方法可能只是扫描文件读取线对以找到你想要的那些。

大多数其他方法都假设您要经常在文件中查找数据,以便在以后花费一些额外时间来优化查询。假设这是正确的,一种可能性是通过读取文件,散列每个作者的名字以及该作者/书籍对的“记录”文件中的位置来创建索引。

然后,您将这些哈希/文件偏移对存储到单独的文件中。当您想要进行查询时,您将把哈希/文件偏移读入内存。散列您正在搜索的作者的名称(使用相同的算法),并查看哪些(如果有)文件偏移具有相同的散列值。寻找文件中的那些位置,并读入该书的记录。此时,如果发生哈希冲突,请将文件中的作者名称重新比较为输入的作者姓名。显示您获得匹配的记录。