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, но я не уверен, как использовать его со структурой.

Спасибо,
м.

0

Решение

Вы можете рассмотреть возможность использования мультикарты вместо QVector. С помощью multimap вы можете отобразить ваши переменные следующим образом:

Сырое представление:

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

Затем вы можете использовать функцию multimap :: equal_range (), чтобы получить набор переменных с тем же «ключом», например, переменные с ключом «VAR1».

Я не уверен, есть ли QMultimap, но есть определенно QMap, который я не смотрел. Но если не просто использовать стандартную мультикарту c ++.

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
0

По вопросам рекламы [email protected]