2

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

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

解决这个问题的最佳方法是什么?我的程序也应该使用类。

4

2 回答 2

4

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

于 2012-09-08T01:21:21.077 回答
1

这在很大程度上取决于您从文件中查找书籍的频率。如果您只想查找一两个,那么最明智的方法可能是扫描文件读取成对的行以找到您想要的行。

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

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

于 2012-09-08T04:45:58.137 回答