Відповіді:
Hash
це вкрай погано названа структура даних, де програміст плутав інтерфейс з реалізацією ( і було лінь писати повне ім'я, тобто HashTable
замість цього вдаватися до абревіатури Hash
).
Dictionary
є «правильним» ім'ям інтерфейсної (= в ADT ), тобто асоціативний контейнер , який відображає (зазвичай унікальні) ключі до (не обов'язково унікальним) значенням.
Хеш-таблиця - це одна можлива реалізація такого словника, яка забезпечує досить хороші характеристики доступу (з точки зору виконання) і тому часто реалізується за замовчуванням.
Така реалізація має дві важливі властивості:
(Якщо ключ є хешируемым, означає, що ми можемо обчислити числове значення з ключа, яке згодом використовується як індекс у масиві.)
Існують альтернативні реалізації структури даних словника, які накладають впорядкування на клавіші - це часто називають сортованим словником (і зазвичай реалізується з точки зору дерева пошуку, хоча існують й інші ефективні реалізації).
Підводячи підсумок: словник - це ADT, який відображає ключі до значень. Існує кілька можливих реалізацій цього ADT, з яких одна хеш-таблиця . Hash
є помилковим, але в контексті він еквівалентний словнику, який реалізується з точки зору хеш-таблиці.
Hash
клас із хеш-таблицею, оскільки Ruby 1.9 Hash
es зберігає порядок вставки, тоді як хеш-таблиця цього не робить. Так, у Ruby 1.9 назва Hash
навіть більше не відображає реалізацію.
"Словник" - це назва поняття. Хештеб - це можлива реалізація.
Словник - це збірний термін, призначений для будь-якої реалізації структури даних, що використовується для швидкого пошуку / вставки. Цього можна досягти / реалізувати за допомогою різноманітних структур даних, таких як хеш-таблиця, пропуск списків, дерево rb тощо. Хеш-таблиця - це конкретна структура даних, корисна для багатьох цілей, включаючи реалізацію словника.
Словник використовує ключ для посилання на значення безпосередньо всередині з асоціативного масиву .
тобто (KEY => VALUE)
Хеш частіше описуються як хеш - таблиця , яка використовує хеш - функцію для обчислення позиції в пам'яті (або більш легко масиву) , де значення буде. Хеш візьме КЛЮЧ в якості вхідного даних і дасть значення як вихід. Потім підключіть це значення до індексу пам'яті чи масиву.
тобто KEY => HASH FUNCTION => VALUE
Я думаю, що один прямий, а інший - ні. Функції хешу можуть бути і не ідеальними, а іноді можуть надавати індекс, що посилається на неправильне значення. Але це можна виправити.
Найкраще місце для пошуку: Вікіпедія ( асоціативний масив та хеш-таблиця )
unordered_map
показати, що вони роблять, а не те, що вони є.