Я работаю с около 30 CSV-файлов с метками строк в алфавитном порядке. Цель состоит в том, чтобы объединить данные в один CSV-файл, пропуская данные, которых нет в каждом файле. Мой текущий метод работает, но это занимает почти 4 секунды. Пример моего профессора exe решает ту же проблему за 0,5 секунды. Я решил сначала создать список меток строк из первого файла, затем прочитать каждый последующий файл и использовать string::compare
, чтобы определить, следует ли удалить узел из моего текущего списка или пропустить текущую строку. Если строки равны, то данные добавляются в мой выходной файл. Псевдокод:
list_row = row labels from file one
read_row = the current label being read
if list_row[0] precedes read_row
erase list_row[0]
if list_row[0] equals read_row
add row data to output and increment list_row
if list_row[0] follows read_row
skip to the next read_row
Я также пытался использовать maps(row_label, total_occurrences)
и удалять вхождения, которые меньше, чем общее количество # входных файлов. Возможно, есть более быстрый способ?
Редактировать: Я понял это. Это был не код. Нас не учили в классе, что у нашего компилятора была другая конфигурация для отладки. Изменив конфигурацию с Debug на Release, программа завершает работу за 0,15 секунды.