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

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

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

Сообщений: 11445


Просмотр профиля
« Ответ #15 : Июль 20, 2020, 06:39 »

Сделать тип, который ведет себя как char* (то есть не овнит, дешево создается/копируется) и который содержит _нужное_ поведение - сравнивает строки как строки, а не как указатели.
Ключ - строка уже проверялось, время теряется на копирование и более тяжелое qHash. Нужен именно адрес, но тогда как обеспечить его валидность? 
Код
C++ (Qt)
static const std::string str_param1("param1");
static const std::string str_param2("param2");
Если я обращаюсь к хешу используя именно эти константы - все хорошо. И мне совсем не нужна возможность "сравнивать содержимое", нужно сделать такой доступ невозможным, напр
Код
C++ (Qt)
mHash["param1"]  // должна быть ошибка компиляции
Намечал так

Код
C++ (Qt)
class CStringKey : protected std::string {
public:
explicit CStringKey( const char * );
const char * c_str( void ) const;
};
Или лучше конструировать только через статик метод. Но как-то выглядит уж очень великом Улыбающийся Какие стандартные средства есть для этого ?
Записан
DarkHobbit
Самовар
**
Offline Offline

Сообщений: 189


Просмотр профиля
« Ответ #16 : Июль 20, 2020, 13:41 »

Профайлер показывает
Если не секрет - что за профайлер, и какая версия IDE?
Записан

Мои проекты на Qt: DoubleContact, LInvert
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #17 : Июль 20, 2020, 14:18 »

Если не секрет - что за профайлер, и какая версия IDE?
Обычный "Time Profiler" (OSX Instruments), достигнутое ускорение подтверждается fps'ами что я сам считаю и показываю юверю
Записан
__Heaven__
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2130



Просмотр профиля
« Ответ #18 : Июль 20, 2020, 18:33 »

Код:
Ключ - строка уже проверялось, время теряется на копирование
Копирования на этапе поиска я побарывал так:
Код:
std::map<string, string, less<>>
За счёт этого можно пользоваться шаблонным find и копирования не будет
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3258


Просмотр профиля
« Ответ #19 : Июль 20, 2020, 19:55 »

__Heaven__
Там у товарища хэш. Гетерогенный (в котором можно искать по std::string/char*/qbytearray) хэш так просто не сделать.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #20 : Июль 21, 2020, 12:45 »

Код:
Ключ - строка уже проверялось, время теряется на копирование
Копирования на этапе поиска я побарывал так:
Код:
std::map<string, string, less<>>
За счёт этого можно пользоваться шаблонным find и копирования не будет
Имелось ввиду копирование при вставке в мапу/хеш. См также ниже

Гетерогенный
Какие вумные слова знаете Улыбающийся Не понимаю что здесь это значит, но не видно оснований отказываться от более быстрого хеша, причем чем проще ключ - тем больше "выйгрышь". Так и получается. Теперь мне нужен лишь "синтаксический сахар" чтобы не путаться с обращениями (сам уже пару раз встревал)

Еще интересная деталь. С массивами я не могу объявить все ключи константами. Т.е.
Код
C++ (Qt)
"light[0].amount"
"light[1].amount"
...
"light[xxx].amount"
Разумеется склейка строки при каждом обращении к хешу не годится. Что предложите?
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


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