Возникла проблема с вашим вопросом: существует столько типов хэш-карт, сколько есть вариантов использования.
Существует множество стратегий для решения проблемы коллизии и перераспределения хешей, в зависимости от имеющихся у вас ограничений. Конечно, вы можете найти среднее решение, которое в основном подойдет, но на вашем месте я бы посмотрел википедию (как предложил Деннис), чтобы понять различные тонкости реализации.
Как я уже сказал, вы в основном можете думать о стратегиях двумя способами:
- Обработка Hash Collision: Bucket, какого рода? Открытая адресация? Двойной хэш? ...
- Перераспределение: заморозить карту или линейную амортизацию?
Кроме того, вы хотите запекать в поддержку многопоточности? Используя операции atomic
, можно получить многопоточные хеш-карты без блокировки, как это было доказано в Java Клиффом Кликом ( Google Tech Talk )
Как видите, не существует одного размера, который бы подходил им всем. Сначала я хотел бы изучить принципы, а затем перейти к деталям реализации.
- C ++
std::unordered_map
использовать корзину связанных списков и заморозить стратегии карт, не уделяя должного внимания правильной синхронизации, как обычно, с STL.
- Python
dict
является основой языка, я не знаю стратегии, которые они выбрали