数据结构/容器选择

Data structure/Container choice

本文关键字:选择 数据结构      更新时间:2023-10-16

我有以下场景:

  • 来自多个视频文件的数据需要保存在一个数据结构/集合中。
  • 一个视频文件可以有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为值对(format, mpeg)。

Inside QVector保存了流的多个对。

外部QVector保存所有内容,即每个条目/索引是单个视频文件的数据。

我不确定这是否是保存数据的最佳方式,我猜集合中的集合中的集合不会非常高效。

有其他选择吗?

为什么不根据需要编写类呢?

class Stream
{
    Format format;
    Resolution res;
    Bitrate br;
};
class Video
{
    QVector<Stream> v_stream;
};
class VideoContainer
{
    QVector<Video> v_video;
};

QVector需要连续定位数据,如经典的c数组。对于一般用途,建议使用QList而不是QVector,后者也提供基于索引的快速访问,但基于指针。

对于字段-值对,使用QMap代替StringList,后者更容易访问。如果您只使用文本属性,甚至可以使用QMap<QString,QVariant>QMap<QString,QString>

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