Я новичок во многих из этих библиотек C++, поэтому, пожалуйста, простите меня, если мои вопросы покажутся наивными.
У меня есть два больших текстовых файла, около 160 МБ каждый (около 700000 строк каждый). Мне нужно удалить из файла2 все повторяющиеся строки, которые появляются в файле1. Для этого я решил использовать unordered_map со строкой из 32 символов в качестве ключа. Строка из 32 символов — это первые 32 символа каждой строки (этого достаточно для уникальной идентификации строки).
В любом случае, я просто просматриваю первый файл и помещаю 32-символьную подстроку каждой строки в unordered_map. Затем я просматриваю второй файл и проверяю, существует ли строка в файле2 в моем файле unordered_map. Если он не существует, я записываю полную строку в новый текстовый файл.
Это отлично работает для файлов меньшего размера (по 40 МБ каждый), но для этих файлов размером 160 МБ требуется очень много времени для вставки в хэш-таблицу (прежде чем я даже начну смотреть файл2). Около 260 000 вставок... кажется, что он остановился или работает очень медленно. Возможно ли, что я достиг предела памяти? Если да, то может ли кто-нибудь объяснить, как это вычислить? Если нет, есть ли что-то еще, что я мог бы сделать, чтобы сделать это быстрее? Может быть, выбрать пользовательскую хэш-функцию или указать некоторые параметры, которые помогут ее оптимизировать?
Моя ключевая пара объектов в хеш-таблице — это (string, int), где длина строки всегда составляет 32 символа, а int — это счетчик, который я использую для обработки дубликатов. Я использую 64-битную ОС Windows 7 с 12 ГБ оперативной памяти.
Любая помощь будет принята с благодарностью.. спасибо, ребята!!
operator []
при проходе через второй файл, иначе размер карты будет увеличиваться без необходимости. - person Mark Ransom   schedule 13.06.2011