[ поиск одинаковых строк ]
Задача такова чтобы найти одинаковые строки в файловых листах и удолить их. Я сделал так чтобы с первого файла считывалась строка потом она начинала стравниватся со всеми строками воторого файла и при нахождении одинаковой прога должна выризать эту строку в обеих файлах(у меня и с этим вознклим проблемы). После вырезки строк происходило считывание следующий строки в первом листе и её стравнивание со всеми строками воторого листа. И так до конца первого.
Но это очень и очень медленно...
особенно если листы большие! причём пользыватель может подумать что прога просто напросто зависла, хотя это не так. Я хотел бы узнать как этот процесс можно организовать быстрее, есть ли какая нибуть функция поиска слов в файле, и как можно правильно вырезать строку чтобы на её месте стала последующая строка.
Пожалуйста подскажите...
1. Создаём массив интов размером с количество строк первого файла
2. шерстим первый файл и пишем в соотв. элемент массива контрольную сумму по текущей строке (контрольную сумму умеешь считать? :))
пункт один и два проделываем для второго файла
сравниваем два массива интов, када значения элементов совпадают - очень большая вероятность что и строки одинаковые :) получаем явно номера строк котрые надо вырезать - можно тоже записать куданить, либо сразу резать . всё.
P.S.
хм,а будет ли быстрее?
можно первый массив сделать них не массивом а мапом (map) вернее даже мультимапом,где ключ - контрольная сумма, а значение - номер строки и проходя по второму массиву вытаскивать из мапа по ключу номера строк...это будет заметно быстрее чем два вложенных цикла, если число элементов большое (>100000)
Цитата:
Originally posted by burashka
В голову ничё лучше не пришло кроме как:
1. Создаём массив интов размером с количество строк первого файла
2. шерстим первый файл и пишем в соотв. элемент массива контрольную сумму по текущей строке (контрольную сумму умеешь считать? :))
пункт один и два проделываем для второго файла
сравниваем два массива интов, када значения элементов совпадают - очень большая вероятность что и строки одинаковые :) получаем явно номера строк котрые надо вырезать - можно тоже записать куданить, либо сразу резать . всё.
P.S.
хм,а будет ли быстрее?
можно первый массив сделать них не массивом а мапом (map) вернее даже мультимапом,где ключ - контрольная сумма, а значение - номер строки и проходя по второму массиву вытаскивать из мапа по ключу номера строк...это будет заметно быстрее чем два вложенных цикла, если число элементов большое (>100000)
В голову ничё лучше не пришло кроме как:
1. Создаём массив интов размером с количество строк первого файла
2. шерстим первый файл и пишем в соотв. элемент массива контрольную сумму по текущей строке (контрольную сумму умеешь считать? :))
пункт один и два проделываем для второго файла
сравниваем два массива интов, када значения элементов совпадают - очень большая вероятность что и строки одинаковые :) получаем явно номера строк котрые надо вырезать - можно тоже записать куданить, либо сразу резать . всё.
P.S.
хм,а будет ли быстрее?
можно первый массив сделать них не массивом а мапом (map) вернее даже мультимапом,где ключ - контрольная сумма, а значение - номер строки и проходя по второму массиву вытаскивать из мапа по ключу номера строк...это будет заметно быстрее чем два вложенных цикла, если число элементов большое (>100000)
А зачем так сложно?
Значительно проще использовать map<string, int>, где значение - номер строки, файловый указатель или т.п. (не обязательно int)
да и вообще чем сложнее делаш механизм тем больше вероятных ошибок..
пожалуйста покажите как то что вы выше предлогали будет выгледить на рабочим примере
если нет желания тогда скажите как можно вырезать целую строку на которой указатель в iostream ?