我有一组大约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,但我不确定如何将它与结构一起使用。
感谢, 米。
答案 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