0

我有一组大约 150 个变量,它们可以有不同的类型(双精度、布尔值、数组)。我需要将这组变量打包到 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,但我不确定如何将它与结构一起使用。

谢谢,米。

4

2 回答 2

1

在进行了一些分析之后,结果证明带有枚举结构的 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 
于 2013-10-09T07:32:01.600 回答
0

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

粗略表示:

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

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

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

于 2013-08-28T15:13:20.603 回答