Есть ли лучший / более эффективный способ хранения больших массивов? - PullRequest
0 голосов
/ 15 июня 2011

Я открываю текстовый файл, который может содержать где-то от 100 до 50 000 фреймов данных, и назначаю каждую строку txt-файла фрейму данных, где фрейм данных определяется следующим образом:

typedef struct {
  double x;
  double y;
  double z;
  double azimuth;
  double elevation;
  double roll;
} dataFrame;

IМне нужно, чтобы данные были доступны, чтобы я мог отобразить их на графике в qwt (что означает, что мне нужно будет создавать различные другие массивы из данных, а также для мгновенной скорости и т. д.), но я немного волнуюсь, так как яне знаю, насколько это замедлит работу системы.В настоящее время я читаю количество строк, а затем получаю

dataFrame*  left;
dataFrame*  right;
left = new dataFrame[lineCount/2];
right= new dataFrame[lineCount/2];

, а затем приступаю к его заполнению при чтении данных из txt-файла.

Ответы [ 3 ]

3 голосов
/ 15 июня 2011

Если вам нужна только быстрая индексация и вы заранее знаете количество элементов (lineCount), ничто не сравнится с хорошим старым массивом. *

Если вы также хотите быстрое добавление, используйте динамический массив, например std::vector или QVector.

Если вы хотите быстро найти элемент по ключу, посмотрите std::set, std::map, QSet, QHash.

[*] Почти ничего. Опубликуйте свои альтернативы в комментариях.

0 голосов
/ 15 июня 2011

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

0 голосов
/ 15 июня 2011

Используйте std::list<dataFrame>.Он не пытается выделить непрерывную память.Если вам нужна дополнительная справочная информация, попробуйте найти краткое описание основных структур данных (массив, связанный список, различные деревья) и их компромиссов в производительности памяти / доступа / удаления / вставки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...