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

时间:2013-08-28 14:33:16

标签: c++ struct enums qvector

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

enum class VariableEnums{
  VAR1,
  VAR2,
  VAR3
};

struct myVariable{
  VariableEnums var;
  QVariant value;
};

QVector<myVariable> myVariables;

我的想法是myVariables将被发送到几个模块。每个模块都会找到一个特定的变量并更新其他变量。因此,一个模块可以更新将由另一个模块使用的变量。到目前为止,关于搜索特定变量,我只能想到:

foreach(myVariable *myVar, myVariables{
   if(myVar->var == VariableEnums::VAR1){
    //......
    continue;
   }
}

有没有更有效的方法呢?我可以使用indexOf,但我不确定如何将它与结构一起使用。

感谢, 米。

2 个答案:

答案 0 :(得分:0)

您可以考虑使用multimap而不是QVector。使用multimap,您可以映射变量,如:

粗俗代表:

{
    VAR1, a
    VAR1, b
    VAR2, c
    VAR1, d
    VAR3, e
    etc...
}

然后你可以使用multimap :: equal_range()函数来获得一组具有相同“key”的变量,例如键“VAR1”的变量。

我不确定是否有QMultimap,但有一个我没看过的QMap。但如果不只是使用标准的c ++ multimap。

答案 1 :(得分:0)

在进行一些分析之后,结果发现具有枚举结构的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