Re[4]: flat_map done, clang вырывается вперед
От: so5team https://stiffstream.com
Дата: 25.12.24 16:28
Оценка: +1
Здравствуйте, rg45, Вы писали:

R>Вот и я пытаюсь представить сценарий, в котором два вектора были бы выигрышнее вектора пар.


Да запросто если идет большая серия проверок на наличие ключа в map-е.
Например, у нас flat_map<int, std::array<std::byte, 64>>. И нам нужно пробежаться по 100500 значениям ключей, чтобы проверить, какие из них уже есть в словаре.
Когда ключи лежат в отдельном векторе, то для кэша процессора такая пробежка будет более щадящей, чем когда и ключ, и значение, лежат парами в одном общем векторе.
Re[5]: flat_map done, clang вырывается вперед
От: rg45 СССР  
Дата: 25.12.24 19:25
Оценка:
Здравствуйте, so5team, Вы писали:

S>Да запросто если идет большая серия проверок на наличие ключа в map-е.

S>Например, у нас flat_map<int, std::array<std::byte, 64>>. И нам нужно пробежаться по 100500 значениям ключей, чтобы проверить, какие из них уже есть в словаре.
S>Когда ключи лежат в отдельном векторе, то для кэша процессора такая пробежка будет более щадящей, чем когда и ключ, и значение, лежат парами в одном общем векторе.

Типа, серия обращений к contains, без заныривания во второй контейнер? Ну, тоже странноватый сценарий, по-моему.
--
Справедливость выше закона. А человечность выше справедливости.
Re[5]: flat_map done, clang вырывается вперед
От: rg45 СССР  
Дата: 25.12.24 21:18
Оценка:
Здравствуйте, so5team, Вы писали:

S>Да запросто если идет большая серия проверок на наличие ключа в map-е.

S>Например, у нас flat_map<int, std::array<std::byte, 64>>. И нам нужно пробежаться по 100500 значениям ключей, чтобы проверить, какие из них уже есть в словаре.
S>Когда ключи лежат в отдельном векторе, то для кэша процессора такая пробежка будет более щадящей, чем когда и ключ, и значение, лежат парами в одном общем векторе.

Я вот смотрю, flat_map заточена на раздельную работу с двумя контейнерами. И такое действительно иногда полезно. Типа, мы строим-строим, инкапсулируем, а по итогу имеем возможность раздать коллекцию значений отдельно от ключей без дополнительных накладных расходов. Типа, есть класс с инкапсулированной мапой, который умеет что-то там акккумулировать, а наружу выставляет константный аксессор, возвращающий константную ссылку на коллекцию значений.
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 25.12.2024 21:27 rg45 . Предыдущая версия . Еще …
Отредактировано 25.12.2024 21:22 rg45 . Предыдущая версия .
Re[3]: flat_map done, clang вырывается вперед
От: cppguard  
Дата: 25.12.24 21:53
Оценка:
Здравствуйте, пффф, Вы писали:

П>НА цппреференсе написано, что это адаптер, который поверх вектора или другого плоского контейнера предоставляет функциональность ассоциативного контейнера. Что не так?


Не так то, что flat map это устоявшийся термин и обозначает другое. Я же привёл шуточный пример с другими названиями, но если шутка непонятна, то распишу, так уж и быть. vector — это на самом деле array, array на самом деле static array, std::remove/std::remove_if на самом деле не удаляет, а меняет порядок. Такая же проблема и с flat_map.
Re[3]: flat_map done, clang вырывается вперед
От: cppguard  
Дата: 25.12.24 21:59
Оценка: :)
Здравствуйте, so5team, Вы писали:

S>Жрать дерьмо под названием C++ и жаловаться на весь мир "ну какое же дерьмо мы жрем, ох, какое же это дерьмо, а мы все жрем и жрем; а ведь дерьмо же дерьмом" продолжая, что характерно, оставаться в C++, почему-то не уходя в этот прекрасный "весь остальной мир".


Какой-то истеричный взгляд. Я лишь отметил проблемы с именованием. Кстати, не я её первый заметил =) Недоумения по поводу vector и std::remove были ещё до того, как я начал профессионально использовать С++. Ради интереса хотя бы поискали "flat map python", "flat map java", "flat map javascript", чтобы понять, что термин устоявшийся и обознает не то, что реализовано в std::flat_map.

S>Может объясните в чем смысл? Или здесь будет так же, как с теми самыми вашими "настоящими инженерами"?


Та просто по приколу. С++ как язык не очень, это настолько очевидно, что официальные структуры США просят его чем-то заменить. Но альтернатив нет, это грустная правда. Если использовать С++ аккуратно, то можно как-то жить. Но плюсовики начинают почему-то сильно возбуждать и рвать пуканы, когда говоришь им очевидные вещи. Что касается "настоящих инженеров", то там оппоненты слились, поэтому смысла дальше продолжать не было.
Re[2]: flat_map done, clang вырывается вперед
От: andyp  
Дата: 25.12.24 22:28
Оценка:
Здравствуйте, cppguard, Вы писали:

C>Поражаюсь умению плюсовиков держаться традиций даже 30 лет спустя!


Критиковать каждый может, а вот придумать название, которое хорошо смотрится маленькими буквами с подчеркиваниями — не каждый.
Re[3]: flat_map done, clang вырывается вперед
От: cppguard  
Дата: 25.12.24 23:05
Оценка:
Здравствуйте, andyp, Вы писали:

A>Критиковать каждый может, а вот придумать название, которое хорошо смотрится маленькими буквами с подчеркиваниями — не каждый.


Это не значит, что критиковать не надо. Задал вопрос ChatGPT, в ответ было предложено indexed_map, что вполне отражает суть, на мой взгляд. От себя могу предложить indirect_map.
Re[4]: flat_map done, clang вырывается вперед
От: rg45 СССР  
Дата: 25.12.24 23:34
Оценка: +1
Здравствуйте, cppguard, Вы писали:

C>я начал профессионально использовать С++.


Об этом знает ещё кто-нибудь, кроме тебя?

C>Ради интереса хотя бы поискали "flat map python", "flat map java", "flat map javascript", чтобы понять, что термин устоявшийся и обознает не то, что реализовано в std::flat_map.


Ну а сюда-то ты как забрёл? От стада отбился?
--
Справедливость выше закона. А человечность выше справедливости.
Отредактировано 25.12.2024 23:34 rg45 . Предыдущая версия .
Re[4]: flat_map done, clang вырывается вперед
От: so5team https://stiffstream.com
Дата: 26.12.24 04:10
Оценка:
Здравствуйте, cppguard, Вы писали:

S>>Жрать дерьмо под названием C++ и жаловаться на весь мир "ну какое же дерьмо мы жрем, ох, какое же это дерьмо, а мы все жрем и жрем; а ведь дерьмо же дерьмом" продолжая, что характерно, оставаться в C++, почему-то не уходя в этот прекрасный "весь остальной мир".


C>Какой-то истеричный взгляд.


Я вот давно замечаю, что у людей, пытающихся охаивать C++, проявляются те или иные странности с умственным развитием. Например, попытки ставить диагнозы по Интернету. Совпадение?

C>Я лишь отметил проблемы с именованием.


Какие именно проблемы, почему это проблемы и как вы предлагаете их решать?

C>Ради интереса хотя бы поискали "flat map python", "flat map java", "flat map javascript", чтобы понять, что термин устоявшийся и обознает не то, что реализовано в std::flat_map.


В мире C++ flat_map-у и flat_set-у уже сто лет в обед, они в Boost-е доступны уже лет 10, как минимум: https://www.boost.org/doc/libs/1_87_0/doc/html/container/non_standard_containers.html#container.non_standard_containers.flat_xxx

И если вы не вкуриваете, то ключевое в названии даже не map, а именно что flat, т.к. здесь явно намекается на способ представления информации. И это, кстати говоря, гораздо лучше, чем даже std::map или std::unordered_map.

S>>Может объясните в чем смысл? Или здесь будет так же, как с теми самыми вашими "настоящими инженерами"?


C>Та просто по приколу.


Тогда почему бы вам не писать такие приколы в какой-нибудь из соцсетей? Кому интересно ваше мнение, те пойдут и почитают. А вот зачем мне на профильном форуме видеть что-то вроде "в C++ опять выбрали неудачное название, не знают люди, что значит flat map в Python-е" от вас или "тупые комитетчики не сумели обойтись без ключевого слова constexpr" от Музыченко?

Вы излили эмоции, вам, может быть, даже полегчало. Но мне и другим C++никам, которые сюда приходят ради обмена опытом, это вот все зачем?

C>Но плюсовики начинают почему-то сильно возбуждать и рвать пуканы, когда говоришь им очевидные вещи.


А вы попробуйте пойти дальше и предложить решение якобы увиденных вами якобы проблем.

C>Что касается "настоящих инженеров", то там оппоненты слились, поэтому смысла дальше продолжать не было.


Так любой желающий может прочитать ветку диалога и попробовать найти там кто же эти самые настоящие инженеры. Заодно и сделать свои выводы о том, кто и как слился: https://rsdn.org/forum/cpp/8828809
Автор: so5team
Дата: 09.10 15:47
Re[6]: flat_map done, clang вырывается вперед
От: so5team https://stiffstream.com
Дата: 26.12.24 04:16
Оценка:
Здравствуйте, rg45, Вы писали:

R>Типа, серия обращений к contains, без заныривания во второй контейнер?


С гораздо более редкими заныриваниями.

R>Ну, тоже странноватый сценарий, по-моему.


Ничего странного. Представьте, что вам нужно выбрать информацию из лог-файла на 100500 строк. В каждой строке есть ID транзакции. Этих ID немного, но на каждый ID может быть не одна тысяча строк. Вы бежите по строкам, выделяете оттуда ID транзакции и проверяете наличие ID-шника в словаре. Если нет, то сохраняете информацию о том, где и когда этот ID-шник первый раз появился.

По итогу у вас будет 100500 обращений к contains, но сама информация о каждой из транзакций будет нужна всего пару-тройку раз.

И касательно вашего второго сообщения: мне как-то больше попадались случаи, когда из map-а нужно было брать не значения отдельно от ключей, а именно что ключи отдельно от значений. Т.е. либо нужно и то, и другое, либо только ключ. А вот чтобы только значение в отрыве от ключа -- вот это гораздо реже. Но у кого-то, наверняка, бывает наоборот.
Re[6]: flat_map done, clang вырывается вперед
От: ononim  
Дата: 26.12.24 09:04
Оценка: +1
R>Типа, серия обращений к contains, без заныривания во второй контейнер? Ну, тоже странноватый сценарий, по-моему.
Один contains это серия обращений к первому контейнеру, там ведь как я понимаю бинарный поиск по массиву. Будет гораздо быстрее если контейнер с ключами целиком влезет в кэш.
Как много веселых ребят, и все делают велосипед...
Re: flat_map done, clang вырывается вперед
От: ononim  
Дата: 26.12.24 09:07
Оценка:
ВР>как правило обычно gcc был лидером по новым плюшками
ВР>как в друг clang вырвался в перед
ВР>контейнер flat_map запушили
Ага, значит мне не показалось и аналогичный велосипедик, запиленный мной 7 лет назад в самом деле полезен в определенных случаях
Как много веселых ребят, и все делают велосипед...
Re[7]: flat_map done, clang вырывается вперед
От: rg45 СССР  
Дата: 26.12.24 09:37
Оценка:
Здравствуйте, ononim, Вы писали:

O>Один contains это серия обращений к первому контейнеру, там ведь как я понимаю бинарный поиск по массиву. Будет гораздо быстрее если контейнер с ключами целиком влезет в кэш.


Ну да. В типовом варианте это дихотомия по отсортированному контейнеру с прямым доступом (вектору).
--
Справедливость выше закона. А человечность выше справедливости.
Re[6]: flat_map done, clang вырывается вперед
От: пффф  
Дата: 26.12.24 09:39
Оценка:
Здравствуйте, rg45, Вы писали:

R>Типа, серия обращений к contains, без заныривания во второй контейнер? Ну, тоже странноватый сценарий, по-моему.


Разве странный? Любой поиск перебирает кучу ключей, а в данные заныривает только для найденного ключа, разве не так?
Re[7]: flat_map done, clang вырывается вперед
От: rg45 СССР  
Дата: 26.12.24 09:44
Оценка:
Здравствуйте, пффф, Вы писали:

П>Разве странный? Любой поиск перебирает кучу ключей, а в данные заныривает только для найденного ключа, разве не так?


Ну, так, да.

Но только не такую уж и кучу Это же поиск логарифмической алгоритмической сложностью.
--
Справедливость выше закона. А человечность выше справедливости.
Re[4]: flat_map done, clang вырывается вперед
От: пффф  
Дата: 26.12.24 09:51
Оценка: :)
Здравствуйте, cppguard, Вы писали:

C>Какой-то истеричный взгляд. Я лишь отметил проблемы с именованием. Кстати, не я её первый заметил =) Недоумения по поводу vector и std::remove были ещё до того, как я начал профессионально использовать С++. Ради интереса хотя бы поискали "flat map python", "flat map java", "flat map javascript", чтобы понять, что термин устоявшийся и обознает не то, что реализовано в std::flat_map.


Ради интереса погуглил. Перечисленные ключевики выводят на какие-то функции методы, которые делают разную хрень, местами отдалённо схожую. Ты бы сам лучше рассказал, что это такое, а то в зоопарке твоих флэт мэпов сам черт ногу сломит. А тут flat_map — это тип.


C>Та просто по приколу. С++ как язык не очень, это настолько очевидно, что официальные структуры США просят его чем-то заменить.


Очередные неосиляторы


C>Если использовать С++ аккуратно, то можно как-то жить.


Любой язык можно использовать неаккуратно


C>Но плюсовики начинают почему-то сильно возбуждать и рвать пуканы, когда говоришь им очевидные вещи.


Да нам наплевать
Re[4]: flat_map done, clang вырывается вперед
От: пффф  
Дата: 26.12.24 09:53
Оценка: +3
Здравствуйте, cppguard, Вы писали:

A>>Критиковать каждый может, а вот придумать название, которое хорошо смотрится маленькими буквами с подчеркиваниями — не каждый.


C>Это не значит, что критиковать не надо. Задал вопрос ChatGPT, в ответ было предложено indexed_map, что вполне отражает суть, на мой взгляд.


Почему ты считаешь, что это отражает суть?


C>От себя могу предложить indirect_map.


При чем тут косвенность?
Re[2]: flat_map done, clang вырывается вперед
От: пффф  
Дата: 26.12.24 09:56
Оценка:
Здравствуйте, ononim, Вы писали:

O>Ага, значит мне не показалось и аналогичный велосипедик, запиленный мной 7 лет назад в самом деле полезен в определенных случаях


Я лет 20 назад пилил себе аналогичный велосипед на векторе, правда, ключи с индексами не разделял, хранил в сортированном векторе.

Полезность, на мой взгляд, в том, что все хозяйство хранится в одном флаконе, и память лишь иногда перераспределяется, а не под каждый узел. Ну и поиск теоретически должен побыстрее работать, так как не бегаем по произвольным участкам памяти, больше попаданий в кеш должно быть
Re[8]: flat_map done, clang вырывается вперед
От: пффф  
Дата: 26.12.24 09:58
Оценка:
Здравствуйте, rg45, Вы писали:

П>>Разве странный? Любой поиск перебирает кучу ключей, а в данные заныривает только для найденного ключа, разве не так?


R>Ну, так, да.


R>Но только не такую уж и кучу Это же поиск логарифмической алгоритмической сложностью.


Чего это не кучу? На 1000 ключей у тебя будет десяток проверок, вполне себе кучка. Грузить в кеш 10 раз данные, которые не нужны — ну, такое себе
Re[4]: flat_map done, clang вырывается вперед
От: andyp  
Дата: 26.12.24 15:36
Оценка:
Здравствуйте, cppguard, Вы писали:

C>Это не значит, что критиковать не надо. Задал вопрос ChatGPT, в ответ было предложено indexed_map, что вполне отражает суть, на мой взгляд. От себя могу предложить indirect_map.


Имхо не очень. То, что эта колбаса в плоской памяти лежит — важнее имхо. Букв в слове flat всего 4, что тоже делает конкуренцию с придумывателями текущего названия сложной. seq_map тоже хуже будет — сокращение, да и для человека с чувством языка похуже чем flat.

Ладно, чота по языкознанию мне больше написать нечего
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.