Название: Медленный QMap.keys() Отправлено: MrDron от Сентября 04, 2017, 11:08 Здравствуйте! Нужно получить key по индексу. Сейчас используется конструкция QMap.keys().at(index).
Есть ли возможность обойти вызов keys() у QMap? Т.к. он очень затратный, при каждом вызове создается новый QList<key> и удаляется. Название: Re: Медленный QMap.keys() Отправлено: MrDron от Сентября 04, 2017, 11:30 Например, конструкцию QMap.keys().indexOf(key) можно заменить на:
Код: QMap<Key, T> map; Но это получение индекса по ключу, а вот наоборот ключа по индексу что то никак ничего подобного найти не могу. Название: Re: Медленный QMap.keys() Отправлено: Igors от Сентября 04, 2017, 11:40 Так в разы быстрее. Тоже не блещета вот наоборот ключа по индексу что то никак ничего подобного найти не могу. Это нормально, нельзя найти то чего нет, ассоциативный контейнер предназначен для обращения по ключу (а не по индексу). Как меньшее из зол можно пробегаться итератором и считать индекс (сэкономите хоть на создании контейнера всякий раз). А вообще надо было думать когда мапу заводили - или переделывать те места где нужен индекс.Название: Re: Медленный QMap.keys() Отправлено: MrDron от Сентября 04, 2017, 11:51 Тоже не блещет Есть вариант быстрее?А вообще надо было думать когда мапу заводили - или переделывать те места где нужен индекс. Пытаюсь оптимизировать чужой код.Название: Re: Медленный QMap.keys() Отправлено: __Heaven__ от Сентября 04, 2017, 14:46 Могу предложить попробовать что-то вроде:
Код
Название: Re: Медленный QMap.keys() Отправлено: __Heaven__ от Сентября 04, 2017, 14:51 Забудьте.
Код
Название: Re: Медленный QMap.keys() Отправлено: MrDron от Сентября 04, 2017, 15:19 Забудьте. Спасибо. Так гораздо лучше! Что-то я как то упустил std::advance()Код
Название: Re: Медленный QMap.keys() Отправлено: __Heaven__ от Сентября 04, 2017, 16:25 Можете также использовать cend() для того, чтобы ко второй половине мапы быстрее попасть.
|