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

Гарантируется ли что map рассматривает возможность наличия в ней нескольких

ключей типа Key, эквивалентных некоторому значению типа T?

16 ответов

4 просмотра

https://en.cppreference.com/w/cpp/container/multimap

Глянул libcxx, для transparent разруливается на equal_range unique/multi. Но там не чистый lower/upper, там спуск, если попали на равный, то lower/upper от него, т.к. обе границы на ветке. В libstc++ так же, но unique похоже не выделен, просто общий код для map/multimap. А вот для transparent там всё странно, один спуск и поиск конца итерацией...

Посмотрел в msvc, общий код для map/multimap, key_type/transparent. Т.е. тоже допускает множественность. Хотя формально не сказано, получается таки имплементации учитывают что порядок может быть слабее чем key_compare, в libcxx так прям явно: https://github.com/llvm-mirror/libcxx/blob/master/include/map#L1452 Ну и как раз за счёт того что для key_type выделена _unique версия получается разница: https://godbolt.org/z/sT8c1f

Dmitry Sokolov
Посмотрел в msvc, общий код для map/multimap, key_...

В стандарте написано четко, что надо вернуть пару из lower/upper bound.

Constantine Drozdov
В стандарте написано четко, что надо вернуть пару ...

Ну если компаратор транзитивный, так оно и есть. И если он транзитивный, то для map он не может вернуть более одного элемента (если сравнение по key_type).

Dmitry Sokolov
Ну если компаратор транзитивный, так оно и есть. И...

Аргумент для equal_range transparent не компаратор, а специальный

Constantine Drozdov
Аргумент для equal_range transparent не компаратор...

Там отдельные имплементации ж в любом случае, по произвольному ключу запрещено для не transparent. Ну и в libcxx соптимизировали по ключу для map.

Constantine Drozdov
Аргумент для equal_range transparent не компаратор...

Так то можно например написать transparent comparator для пар который заодно сможет сравнивать по first. И через equal_range(FirstType) получать диапазоны с одинаковым key.first.

Dmitry Sokolov
Так то можно например написать transparent compara...

Можно еще в этом случае компаратор, выдающий нетранзитивное равенство, использовать :)

Dmitry Sokolov
Так то можно например написать transparent compara...

есть такая известная в узких кругах штука max(lhs.second, lhs.first + rhs.second) <=> max(rhs.second, rhs.first + lhs.second)

Constantine Drozdov
Можно еще в этом случае компаратор, выдающий нетра...

Ну и вот поиск upper_bound итерацией это мне кажется баг: https://github.com/gcc-mirror/gcc/blob/master/libstdc%2B%2B-v3/include/bits/stl_tree.h#L1407 Может я например разложил числа типа четные налево, нечетные направо и через equal_range получаю диапазоны чётный/нечётный. Это ж половину дерева придется обойти.

Dmitry Sokolov
Ну и вот поиск upper_bound итерацией это мне кажет...

хм... а это не сломается уже на нормальном запросе transparent компаратора для мультимапы из одинаковых элементов?

Constantine Drozdov
хм... а это не сломается уже на нормальном запросе...

Не, там по сравнениям то смысл тот же самый что и в upper_bound.

Dmitry Sokolov
Не, там по сравнениям то смысл тот же самый что и ...

нельзя в мультимапе итерировать весь range, ответ может быть вся мапа

Андрей-Руссков Автор вопроса
Dmitry Sokolov
Ну и вот поиск upper_bound итерацией это мне кажет...

при этом по идее стандарт гарантирует ассимптотику операций )

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

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

а зачем этот вопрос для удаления из чата?
Mёdkinson Medvezhkin
63
Блин, интересно, кто-нибудь когда-нибудь переписывал какую-нибудь игру с x86 на arm? Вообще, такое возможно?
Alan 🔝 Бэброу
12
Добрый день. Хочу сделать отрисовку по команде на панели. Почему-то рисуется только при втором вызове. С чем может быть связано, не подскажете? procedure TForm1.FormDblClick(...
Kirill Filippenok
20
I just installed it but how do I use it?
Talula
12
Всем привет! Подскажите. Я написал приложение на Delphi 10.2 Tokyo под Windows 10. И передо мной стал вопрос о том чтобы сделать это приложение кроссплатформенным (под Linux и...
Дмитрий Завгородний
24
Всем доброго дня! Подскажите может кто использовал связку Pagebuilder + Clientsetting. Сами параметры с типом pagebuilder в модуле Clientsetting работают нормально, можно такж...
Александр Добриков
12
Всем привет! Нужен совет от опытных. Переношу свой проект с Делфи 10.2 Токио на Лазарус 3.2 установленный через инсталлятор fpcupdeluxe-x86_64-win64. При импортировании проект...
Дмитрий Завгородний
7
А почему в си некоторые вещи работают с двойными кавычками некоторые с одинарными? Нельзя было все сделать с одними или чтоб работало с разными? например чтоб выводить строки ...
.
15
Эх кто-то пришел и весь праздник испортил :( You need complex FBX scene importing setup to change things on import? good luck with that. You need navigation and pathfinding? g...
Serg Gini
5
Приветствую всех, возникла проблема, до этого писал бота в простом формате где при выполнении условий приходило через send_message информация, сейчас решил добавить хендлер на...
Andrew
4
Карта сайта