170 похожих чатов

На C++R2023 в докладе Антона была TrivialBiMap по аналогии с

LLVM.
А как решать задачу, если целевой компилятор - MSVC, в подобные оптимизации умеющий крайне плохо?
Нужно отобразить десяток-другой коротких строк в числа и обратно.

12 ответов

15 просмотров

ну сделайте нужную часть на Clang или icx

Dmitriy-[Отпуск] Автор вопроса

Может frozen подойдёт, там вроде в compile time perfect hash строится. Хотя десяток-другой это можно и перебором, даже без всяких оптимизаций.

Dmitry Sokolov
Может frozen подойдёт, там вроде в compile time pe...

Да оно норм работает, но это O(длины строки). Но если важно, можно обычно лучше написать, засчет того что размер строк обычно разный. То есть switch по размеру + switch по 1 букве хватает для большинства константных строк. Но это нужно вручную писать :(

Arelav
Да оно норм работает, но это O(длины строки). Но е...

В данном случае вообще всё сводится к предположению что msvc не умеет в оптимизации :) И думаю надобность в оптимизациях тоже только предположение.

Arelav
Да оно норм работает, но это O(длины строки). Но е...

Ну и да, на небольших наборах простой цикл наверное быстрее работает потому что сразу отбрасываются не проходящие по размеру и memcmp делается только на равных по размеру строках. И даже если их не один, это всё равно может быть быстрее чем хэш.

Arelav
Да оно норм работает, но это O(длины строки). Но е...

Хм... я кстати до конца не разбирался. Но там случаем не FNV? Я вот подумал это очень плохой хэш для того чтобы быть perfect.

Arelav
Да fnv

Он же не просто O, он дорогой, там умножения

Dmitry Sokolov
Он же не просто O, он дорогой, там умножения

Ну относительно, но да, какой нибудь wyhash/city64 дешевле

Arelav
Ну относительно, но да, какой нибудь wyhash/city64...

Не, fnv это точно не для pfh :) Это если не заморачиваться как в gperf. Самый простой вариант это нагенерить рандом с которым вход можно просто поксорить.

Похожие вопросы

Обсуждают сегодня

я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
49
читать файл максимально быстро? странный вопрос))
zamtmn
53
How to create an OS in C? what to study?
Linus
18
Привет, кто может сделать юзербота с апи? Задачи: - создавать группы - создавать каналы - задавать для созданных каналов аватарку или эмоджи, имя группы - добавлять в группы...
Lencore
11
тоесть, указав return eax, сгенерируется никому ненужная инструкция mov eax,eax ?
Aiwan \ (•◡•) / _bot
24
Компания Elif ищет менеджера проектов, который будет заниматься поиском и ведением новых проектов. Прежде чем приступить к работе, вам нужно пройти наш недельный курс, где вы ...
Elif
5
@HemulGM Параметры у AddStream поменялись? Несостыковка какая-то
Катерина Свиридова
12
Подскажите, есть какие-то события создания/уничтожения у TFrame по типу TForm (OnCreate и OnClose/OnDestroy) ? Как отловить создание TFrame и "перед" уничтожением. На Tframe р...
Денис
8
а чем хуже?
Alexey Kulakov
10
Компания Elif ищет менеджера проектов, который будет заниматься поиском и ведением новых проектов. Прежде чем приступить к работе, вам нужно пройти наш недельный курс, где вы ...
Elif
1
Карта сайта