数据结构/容器选择

时间:2011-07-07 09:33:22

标签: c++ qt collections

我有以下情况:

  • 多个视频文件中的数据需要保存在数据结构/集合中。
  • 视频文件可以包含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 个答案:

答案 0 :(得分:6)

为什么不按需要编写课程?

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

class Video
{
    QVector<Stream> v_stream;
};

class VideoContainer
{
    QVector<Video> v_video;
};

答案 1 :(得分:2)

QVector需要连续定位数据,如经典C阵列。出于一般目的,推荐使用QList而不是QVector,它还提供基于指针的快速基于索引的访问。

答案 2 :(得分:1)

对于字段值对,使用QMap而不是StringList,这将更容易访问。如果您只使用文字属性,可能会QMap<QString,QVariant>QMap<QString,QString>

此外,正如三氯生所说,使用QList代替QVector。所以最后的样子是QList<QList<QMap< QString,QVariant > > >