Size: a a a

Rust — русскоговорящее сообществo

2020 March 04

MF

Max Frai in Rust — русскоговорящее сообществo
спасибо
источник

P

Pavel in Rust — русскоговорящее сообществo
источник

M

Marat in Rust — русскоговорящее сообществo
можно навернуть сверху стандартной мапы хранилище из нод, ссылающихся друг на друга
источник

M

Marat in Rust — русскоговорящее сообществo
во, кто-то уже по факту уже сделал такое
источник

P

Pavel in Rust — русскоговорящее сообществo
Marat
во, кто-то уже по факту уже сделал такое
ну, это ж стандартное решение мапы с порядком
источник

p

polunin.ai in Rust — русскоговорящее сообществo
Чёт я не понимаю, какой там принцип хеширования юзается. Видимо я ещё мало про хеш-мапы знаю...
источник

P

Pavel in Rust — русскоговорящее сообществo
polunin.ai
Чёт я не понимаю, какой там принцип хеширования юзается. Видимо я ещё мало про хеш-мапы знаю...
там передаётся хешер, вроде
источник

P

Pavel in Rust — русскоговорящее сообществo
а под капотом может юзать просто какой-то свой и пробегаться по структуре
источник

P

Pavel in Rust — русскоговорящее сообществo
Max Frai
Просто вот где-то недавно буквально читал о какой-то хешмапе на реддите, которая иначе хранит данные, что позволяет гарантировать порядок
ну и BTreeMap тоже гарантирует порядок, но не сохраняет порядок добавления
источник

P

Pavel in Rust — русскоговорящее сообществo
тоесть она сортированная
источник

M

Marat in Rust — русскоговорящее сообществo
Pavel
а под капотом может юзать просто какой-то свой и пробегаться по структуре
вряд ли можно придумать хэшер H(key, pos), который будет упорядочен по pos
источник

P

Pavel in Rust — русскоговорящее сообществo
Marat
вряд ли можно придумать хэшер H(key, pos), который будет упорядочен по pos
при чём тут хешер?
источник

P

Pavel in Rust — русскоговорящее сообществo
вот кусок из доки по реализации в джаве, например — список поверх мапы

https://github.com/openjdk-mirror/jdk7u-jdk/blob/master/src/share/classes/java/util/LinkedHashMap.java#L30-L39
источник

M

Marat in Rust — русскоговорящее сообществo
Если у тебя ключ будет находится во множестве меньшем по мощности, чем мапа может размещать ключи в себе, то можно придумать схему хранения, когда бакеты будут располагаться в возрастающем порядке в зависимости от позиции вставки. Самый простой вырожденный случай - это массив.
источник

P

Pavel in Rust — русскоговорящее сообществo
Marat
Если у тебя ключ будет находится во множестве меньшем по мощности, чем мапа может размещать ключи в себе, то можно придумать схему хранения, когда бакеты будут располагаться в возрастающем порядке в зависимости от позиции вставки. Самый простой вырожденный случай - это массив.
и потерять весь перформанс хешмапы?
источник

M

Marat in Rust — русскоговорящее сообществo
а, ну да, тогда каждая вставка - это коллизия
источник

P

Pavel in Rust — русскоговорящее сообществo
хешмапа на то и рассчитана, что у тебя множество ключей может быть больше, чем множество бакетов, чем ближе они, тем ниже перформанс
источник

P

Pavel in Rust — русскоговорящее сообществo
не, наоборот
источник

P

Pavel in Rust — русскоговорящее сообществo
перформанс выше, но память всю жрёт

мало бакетов — больше коллизий
много бакетов — больше памяти требуется
источник

M

Marat in Rust — русскоговорящее сообществo
можно еще использовать принцип хранения, который использует ImmutableMap из guava, в которой гарантируется такой же порядок итерирования, как при вставке в ImmutableMap.Builder
источник