Russian Qt Forum
Март 29, 2024, 08:17 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Ускорить  (Прочитано 3945 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« : Апрель 25, 2021, 10:10 »

Добрый день

Есть такой метод
Код
C++ (Qt)
Channel * MyClass::SlowGetPrevChannel( const CData * dst ) const
{
 Channel * prev = 0;
 for (const auto & data : mData) {
  if (&data == dst) break;
  if (data.mChannel)
   prev = data.mChannel;
 }
 return prev;
}
И всем он хорош (особенно простотой), но увы - притормаживает. Поле mChannel меняется между вызовами. Создавать любые доп контейнеры - пожалуйста, главное убрать тормоз

Цитировать
Закурим, ребята, закурим
(ну в смысле "покажем high-end"  Улыбающийся)
« Последнее редактирование: Апрель 25, 2021, 10:12 от Igors » Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4349



Просмотр профиля
« Ответ #1 : Апрель 25, 2021, 10:13 »

Двухсвязный список как раз позволяет очень быстро узнать предыдущий элемент.
Но вы то используете исключительно QVector. Грустный
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #2 : Апрель 26, 2021, 14:05 »

QVector кстати сам по себе - тормоз даже по сравнению с std::vector.
А тут имхо лучше построить QMap с чилда на пэрент: QMap<CData*, CData*> childToParentMap
Т.к. QList придётся всё равно просматривать.
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
RedDog
Частый гость
***
Offline Offline

Сообщений: 221


Просмотр профиля
« Ответ #3 : Апрель 26, 2021, 15:06 »

А тут имхо лучше построить QMap с чилда на пэрент: QMap<CData*, CData*> childToParentMap
Если данных много, лучше QHash
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Апрель 26, 2021, 15:41 »

QVector кстати сам по себе - тормоз даже по сравнению с std::vector.
А тут имхо лучше построить QMap с чилда на пэрент: QMap<CData*, CData*> childToParentMap
Т.к. QList придётся всё равно просматривать.
mData - любой контейнер прямого доступа (конкретно у меня QList). Только никаких парент-чайлд нема Плачущий И я о них ничего и не говорил. Что предлагается строить? Непонимающий
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #5 : Апрель 27, 2021, 13:57 »

Не, тогда пожалуйста детальное описание данных и условие задачи в студию Улыбающийся а то код похож на говнокод с багом, честно говоря...
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Апрель 27, 2021, 15:44 »

Не, тогда пожалуйста детальное описание данных и условие задачи в студию Улыбающийся а то код похож на говнокод с багом, честно говоря...
Как же Вы заблудились в ровно 10 строках (включая скобки и объявление) простого, без всяких наворотов, кода  Непонимающий Что вызвало такое "непонимание"?  Улыбающийся Лень во что-то вникнуть, лень посчитать даже на один ход вперед, вообще все лень. Так приходит старость..
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Апрель 28, 2021, 13:48 »

Случай досадный, бывают такие. Неск строк совершенно дубового кода делают все что нужно, правда ценой производительности. Но как сделать без перебора - не вижу. Выдавил из себя такое

- в каждый эл-т mData вписать его индекс и при поиске просматривать вверх от этого индекса.

Ну это будет работать пока нет удалений/вставок в mData между поисками. И сейчас их действительно нет, но увы - нет и никаких гарантий что они не понадобятся Плачущий. Да и ускорение сомнительно, напр на старте все mChannel нулевые, и придется какое-то время побегать по mData пока они не заполнятся.

Самое время заводить говнокодерскую песню о "преждевременной оптимизации", ну или там про "область применения" и.т.п. Но мы же не такие, правда?  Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.136 секунд. Запросов: 22.