C++ 带结构的QVector-性能+;最佳实践

C++ 带结构的QVector-性能+;最佳实践,c++,struct,enums,qvector,C++,Struct,Enums,Qvector,我有一组大约150个变量,可以有不同的类型(double、bool、array)。这组变量我需要打包成一个QVector。由于类型变量的不同,我想到了使用QVariant。到目前为止,这是我的设计。我不确定的是myVariables的性能+搜索机制 enum class VariableEnums{ VAR1, VAR2, VAR3 }; struct myVariable{ VariableEnums var; QVariant value; }; QVector<

我有一组大约150个变量,可以有不同的类型(double、bool、array)。这组变量我需要打包成一个QVector。由于类型变量的不同,我想到了使用QVariant。到目前为止,这是我的设计。我不确定的是myVariables的性能+搜索机制

enum class VariableEnums{
  VAR1,
  VAR2,
  VAR3
};

struct myVariable{
  VariableEnums var;
  QVariant value;
};

QVector<myVariable> myVariables;
有没有更有效的方法?我可以使用indexOf,但我不确定如何将其用于结构

谢谢,
M. < /P> < P>你可以考虑使用MultIAP代替QVector。使用multimap,您可以映射变量,如:

粗略表述:

{
    VAR1, a
    VAR1, b
    VAR2, c
    VAR1, d
    VAR3, e
    etc...
}
然后可以使用multimap::equal_range()函数获取一组具有相同“键”的变量,例如具有键“VAR1”的变量


我不确定是否有QMultimap,但确实有一个QMap我没有看过。但如果不是使用标准C++ MultIMAP。

,在做了一些分析之后,发现QVector的枚举结构是最快的组合。QVector

我尝试过QHash、QMap和数据持有者QString和QVariant

基准:

...searching in dataset size:  1090000 
testing < QVector<struct enum> > case time (ms): 242 
testing < QVector<struct QString> > case time (ms): 1220 
testing < QMap<enum, QVariant> > case time (ms): 3458 
testing < QHash<enum, QVariant> > case time (ms): 2167 
…在数据集大小中搜索:1090000
测试案例时间(ms):242
测试案例时间(ms):1220
测试案例时间(ms):3458
测试案例时间(ms):2167

您必须对其进行分析。这样,您将了解此选项在您的系统上的性能。它也是构造
QVector
QVector
。。。并根据需要传递它们。您的代码似乎患有健忘症,因为您知道类型,然后忘记了它。您是否将不同的类型与VAR1到VAR3关联?如果是这样,为什么不简单地保留三个单独的值列表,并且只处理特定类别中的值?这不仅可以避免搜索异构容器,还可以消除QVariant的运行时开销。当然,除非你绝对需要一个单一的异构容器。就我所知,从性能的角度来看,QVector比QMap快,所以我考虑的更多QVector@MiroKarpis在这种情况下,我不确定vector的性能是否更好。多重映射存储按“键”排序的元素。因此,当它需要使用“equal_range()”函数提取元素时,它可以非常快地完成(如果有许多结果需要查找,则比vector更快)。然而,对于添加/删除元素或通过索引访问单个元素,vector可能更快。。。这取决于您希望在何处优化您的性能。。。。在我看来,您似乎希望在快速获得结果时进行优化:)
...searching in dataset size:  1090000 
testing < QVector<struct enum> > case time (ms): 242 
testing < QVector<struct QString> > case time (ms): 1220 
testing < QMap<enum, QVariant> > case time (ms): 3458 
testing < QHash<enum, QVariant> > case time (ms): 2167