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

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

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

12 ответов

34 просмотра

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

Может 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. Самый простой вариант это нагенерить рандом с которым вход можно просто поксорить.

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

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

Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Коллеги, я тут для личных нужд пошел ставить MQTT сервер, пощупал mosquitto, но ужаснулся отсутствию такой банальности, как HTTP API для посмотреть список топиков. А тут что,...
Maksim Lapshin
9
#include <stdio.h> #include <stdlib.h> #include <time.h> void mass_first_generate(int mass[5][7]) {     for (int N = 0; N < 5; N++) {         for (int A = 0; A < 7; A++) {   ...
Чувак
6
Всем привет! Решаю 99 OCaml Problems и столкнулся со следующей проблемой (прошу палками не забивать, я OCaml практически не трогал до этого момента): open OUnit2 let create_...
К|/|pи/\/\ 6е3yглbIи
2
https://www.linkedin.com/posts/ugama-benedicta-kelechi-codergirl-103041300_mobiledevelopment-fluttertraining-handsonlearning-activity-7263445699227254784-IdHB?utm_source=share...
CoderGirl
16
Ну вот просто даже давайте вот как. Какой нибудь конкретный кейс, можете в пример привести, где бч работает и приносит прикладную пользу, а не просто что бы было? Не крипту.
Alexander Andreev
22
Точно, оно. У тебя там имена потоков выставляются?
Александр (Rouse_) Багель
11
возможно ли как-то передать в электрон или таури медиа поток с рендера 2д движка? двиг запускается как dll, а дальше надо как-то отправлять рендер кодировать не подходит, зр...
Kyle Nekto
7
Помогите пожалуйста. Делаю систему плагинов. Проблема сейчас в такая: плагины загружаются в основном потоке. FLibHandle := SafeLoadLibrary(FFileName) Но нужно еще выполнить фу...
Илья 🤣
10
объясните пожалуйста, почему функция не работает должным образом? вроде должно брать активное окно сравнивать его размер с размером экрана, и если есть совпадение = true прове...
JF
12
Карта сайта