Структура данных / выбор контейнера - PullRequest
2 голосов
/ 07 июля 2011

У меня есть следующий сценарий:

  • Данные из нескольких видеофайлов должны храниться в структуре данных / коллекции.
  • В видеофайле может быть от 1 до нескольких видеопотоков.
  • В каждом потоке есть пара полей и значений.

Например:

Video1:
  Stream1:
    format mpeg
    bitrate 700kb/s
    resolution 1024x764

  Stream2:
    format mpeg
    bitrate 600kb/s
    resolution 800x600

Video2:
  Stream1:
    format mpeg
    bitrate 700kb/s
    resolution 1024x764

  Stream2:
    format mpeg
    bitrate 600kb/s
    resolution 800x600

Это то, что я рассматривал для хранения данных:

QVector<QVector<QStringList>>

Где QStringList - пары значений (формат, mpeg).

Внутри QVector содержит несколько пар для потока.

Снаружи QVectorвсе, т. е. каждая запись / индекс - это данные для одного видеофайла.

Я не уверен, является ли это лучшим способом хранения данных. Я полагаю, что коллекция внутри коллекции внутри коллекции не собираетсябыть очень эффективным.

Есть ли мнения об альтернативах?

Ответы [ 3 ]

6 голосов
/ 07 июля 2011

Почему бы не написать классы, как вам нужно?

class Stream
{
    Format format;
    Resolution res;
    Bitrate br;
};

class Video
{
    QVector<Stream> v_stream;
};

class VideoContainer
{
    QVector<Video> v_video;
};
2 голосов
/ 07 июля 2011

QVector требуется для непрерывного расположения данных, таких как классический C-массив.Для общих целей рекомендуется использовать QList вместо QVector, который также обеспечивает быстрый доступ на основе индекса, но на основе указателей.

1 голос
/ 07 июля 2011

Для пар поле-значение используйте QMap вместо StringList, это будет проще для доступа. Может быть, даже QMap<QString,QVariant> или QMap<QString,QString>, если вы используете только текстовые свойства.

Также, как сказал триклозан, используйте QList вместо QVector. Таким образом, окончательный вид будет QList<QList<QMap< QString,QVariant > > >

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