Форум программистов, компьютерный форум CyberForum.ru

Как ускорить работу с файлами? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Как поместить в STL-контейнер экземпляры разных классов? http://www.cyberforum.ru/cpp-beginners/thread1800935.html
Как поместить в контейнер экземпляры разных классов(типов) :thank_you:?
C++ Multiple definition: почему компилятор ругается на единственную функцию, используемую в обоих source-файлах? Пихаю хедер в 2 сурсца разных классов. Компилятор ругается на единственную функцию, которую я использую в обоих сурсцах. #ifndef LIB #define LIB void func() {} #endif // LIB Файл: A.cpp http://www.cyberforum.ru/cpp-beginners/thread1800877.html
Почему не работает cout в перегруженной функции? C++
Всем привет. Есть простое заданеие из первых уроков учебника Шитдта о перегрузке функции. Все компелится и работает если бы не одно НО. В функции с аргументами и выходными данными двойнеой точности не работает строка вывода. Я ей вставляю но он никак не реагирует, только возвращает значение. Вот код. #include <iostream> using namespace std; int min(int a,int b); char min(char a,char b);...
C++ Исправить ошибку LNK2019: ссылка на неразрешенный внешний символ (InternetCheckConnection и WinAPI)
Создаю простенькое приложение на winapi с кнопкой и полем edit, по нажатию на которую происходит проверка подключения к интернету и вывод результата в поле: if (InternetCheckConnection("http://ya.ru", FLAG_ICC_FORCE_CONNECTION, 0)) { SendMessage(edit, WM_SETTEXT, NULL, (LPARAM)"Соединение с сетью установлено"); } else { SendMessage(edit, WM_SETTEXT, NULL, (LPARAM)"Нет соединения с...
C++ Скопировать файл xlsx формата, в копию внести изменения и сохранить http://www.cyberforum.ru/cpp-beginners/thread1800777.html
Добрый вечер. У меня есть задача, которая заключается в следующем. Написать консольное приложение, которое скопирует файл xlsx формата, в копию внесет изменения и сохранит. Собственно вот в чем основной вопрос. Как мне это сделать?)) Не прошу сделать за меня. Просто помочь советом и направить. Бесплатных библиотек пока что не смог найти. Если еще короче. Как мне считать данный с файла xlsx...
C++ Найти значение числа Пи по формуле произведения Добрый вечер уважаемые программисты!!! Задача довольно таки не сложная но возникли определенные трудности. Описание задачи: Описать функцию Pi(eps), которая находит значение числа Пи по формуле произведения (т.е. по формуле Валлиса): Пи/2 = 2/1*2/3 x 4/3*4/5 x 6/5*6/7 ... с указанной точностью eps. Обратится к функции со значениями точности 0.01, 0.001, 0.0001. подробнее

Показать сообщение отдельно
Avazart
Заблокирован
01.09.2016, 19:08     Как ускорить работу с файлами?
Цитата Сообщение от Керра Посмотреть сообщение
значит оператор < тоже нужно делать относительно char*, я думаю.
Относительно двух char*-ов.

Добавлено через 5 минут
C++
1
2
3
4
5
6
7
8
9
10
11
struct Part 
{
   char id2[10], name[20];
   bool operator<(const Part& part) const;
   {
      if(strcmp(id2,part.id2)<0)
        return true;
      return strcmp(name,part.name)<0;
   }
   // ...
};
Добавлено через 28 минут
Хотя конечно я вероятно не особо въезжаю в твой код и то что ты хочешь сделать.

У тебя строка файла состоит из трех строковых значений разделенных ":"
По двум идет сравнение - третье - искомое значение.
Отличие между двумя файлами только в порядке следования.

Я вижу задачу приблизительно так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
const std::size_t str_size= 20;
 
struct Line
{
    std::pair<std::string,std::string> key;
    std::string value;
 
    Line():
      key(std::make_pair(std::string(str_size,'\0'),std::string(str_size,'\0')),
      value(std::string(str_size,'\0'))
    {
    }
 
    bool operator<(const Line& line) const;  {   return key < line.key;  }
    bool operator>(const Line& line) const;  {   return key > line.key;  }
    bool operator==(const Line& line) const;{   return key == line.key;  }
};
 
typedef std::vector<Line> Lines;
Потом читаем
C++
1
2
    Lines lines; 
    lines.reserve(1000);
Цикл чтения
C++
1
2
3
4
5
6
7
8
9
10
11
    Line line;  
    fscanf_s(f, "%s:%s:%s", &line.value[0], &line.key.first[0], &line.key.second[0]);
     //  &s[0] или используем s.data()
     /*
          Да и тут стоит как-то уменьшить размеры строк 
          c размера 20 до реального размера(до первого '\0')
          иначе сравнения между  std::string -гами могут быть медленным,
          или в самом сравнении структур Line
          все же использовать strcmp() а не операторы string
    */
    lines.push_back(line);
Cортируем
C++
1
     std::sort(lines.begin(),lines.end());
Читаем также строки с файла 2 только меняем очередность параметров и ищем их
C++
1
2
3
4
    Lines::iterator it= lower_bound(lines.begin(),lines.end(),line_from_file2); 
     // или std::equal_range в зависимости от того есть ли дубликаты
    if(it!=lines.end())
       // ...
Бинарный поиск в STL
 
Текущее время: 13:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru