ifstream лучший способ читать без использования памяти

У меня есть текстовый файл, который содержит авторов и книги, написанные авторами. Мне поручено написать программу, в которой пользователь предоставит имя автора. И программа должна напечатать название любых книг, написанных этим автором.

Я понимаю, что я должен использовать ifstream для чтения этой информации. Но как я могу сделать так, чтобы моя программа не прочитать весь файл в память (массив, вектор и т. д.) для выполнения каких-либо поисковых запросов?

Как лучше всего подойти к этому? моя программа должна также использовать классы.

2

Решение

Я не знаю полного ответа или даже синтаксиса, но хороший способ начать — что вы знаете о формате входного текстового файла? Это просто файл из двух столбцов, например: [Книга авторов], разделенный общим разделителем? В этом случае вы могли бы создать цикл, который проходит через весь файл, и сохранять только записи в векторе, которые соответствуют строке поиска.

4

Другие решения

Здесь многое зависит от того, как часто вы будете искать книги из файла. Если вы собираетесь искать только один или два, то наиболее разумный метод, вероятно, состоит в том, чтобы просто сканировать пары строк для чтения файла, чтобы найти нужные.

Большинство других методов предполагают, что вы будете искать данные в файле достаточно часто, чтобы оправдать затраты дополнительного времени на оптимизацию запросов в дальнейшем. Предполагая, что это правильно, одной из возможностей будет создание индекса путем чтения файла, хэширования имени каждого автора и позиции в файле «записи» для этой пары автор / книга.

Затем вы сохраните эти пары смещения хеш / файл в отдельный файл. Когда вы захотите сделать запрос, вы прочитаете смещения хэшей / файлов в память. Хэшируйте имя автора, которого вы ищете (используя тот же алгоритм), и посмотрите, какие (если есть) смещения файла имеют одинаковое значение хеш-функции. Найдите эти места в файле и прочитайте запись в книге. В этот момент повторно сравните имя автора в файле с именем автора, которое было введено, в случае коллизии хеша. Покажите записи, где вы получите совпадение.

1

По вопросам рекламы [email protected]