Улучшение производительности с помощью QHash и QList

Я использую эти классы:

QHash: представление всех объектов сцены (не может изменить этот класс)

QList: представление всех выбранных объектов. Содержит идентификаторы (сохраняются как int)

//DrawSelectedObjects(){

QHash<QString, SceneObject*>& hash=sc->getObj();
QList<int> tempList = HitsList;

int counter =0;

for (QHash<QString,SceneObject*>::ConstIterator i = hash.begin();i!=hash.end();++i) {

if (tempList.startsWith(counter)) {
.
Draw_as_selected()
.
tempList.removeOne(counter);
}
}
}

Так, например, если я выберу объект №77, его идентификатор будет сохранен в Hitslist (QList).

После этого HitsList сортируется и DrawSelectedObjects() называется.

Это должно повторять QHash до тех пор counter=77 а также Draw_as_selected(), После этого первый элемент QList удаляется, вытягивая вперед второй.

Эта функция вызывается КАЖДЫЙ раз, когда выбирается один объект. С небольшими импортированными сценами все в порядке, но когда я использую файлы размером> 10 МБ, я вижу некоторую задержку вывода (это очевидно, потому что я перебираю огромный QHash).

Не могли бы вы предложить мне более эффективный способ сделать это? Любая помощь будет оценена.

РЕДАКТИРОВАТЬ:

Спасибо за ваш ответ. Проблема в том, что я не могу избавиться от этого QList<int> (Я могу вставлять только целые числа в стек выбора OpenGL).

Таким образом, другой путь из вышеупомянутого решения состоит в том, чтобы сделать QString.toInt() для каждого элемента QHash и сохранить их в QList<int>,

Дело в том … как узнать правильный QString на хеш, используя int (рассчитывается сейчас путем конвертации из QStringне больше из прилавка) на QList?

0

Решение

Если для доступа к объектам в хэше используется QString (Я предполагаю, что «имя» объекта, а не его идентификатор), то вы также должны использовать список QString сохранить выбранные объекты.

QHash<QString, SceneObject*> & hash = getAllObjects();
QList<QString> & tempList = getSelectedObjects();

foreach(QString name, tempList)
hash[name]->drawAsSelected(); // or drawAsSelected(hash[name]) depending on your design
2

Другие решения

Других решений пока нет …

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