Ответы:
Hash
это крайне плохо названная структура данных, в которой программист перепутал интерфейс с реализацией ( и ему было лень писать полное имя, т.е. HashTable
вместо этого прибегать к сокращению Hash
).
Dictionary
является «правильным» именем интерфейса (= ADT ), то есть ассоциативным контейнером, который отображает (обычно уникальные) ключи на (не обязательно уникальные) значения.
Хеш-таблица является одной из возможных реализаций такого словаря, который обеспечивает довольно хорошие характеристики доступа (с точки зрения времени выполнения) и поэтому часто является реализацией по умолчанию.
Такая реализация имеет два важных свойства:
(Если ключ является хешируемым, это означает, что мы можем вычислить числовое значение из ключа, который впоследствии используется в качестве индекса в массиве.)
Существуют альтернативные реализации структуры данных словаря, которые налагают порядок на ключи - это часто называют отсортированным словарем (и обычно реализуется в терминах дерева поиска, хотя существуют и другие эффективные реализации).
Подводя итог: словарь является ADT, который сопоставляет ключи со значениями. Существует несколько возможных реализаций этого ADT, одной из которых является хеш-таблица . Hash
является неправильным, но в контексте это эквивалентно словарю, который реализован в терминах хэш-таблицы.
Hash
класс с хэш-таблицей, поскольку Ruby 1.9 Hash
сохраняет порядок вставки, а хеш-таблица - нет. Итак, в Ruby 1.9 имя Hash
даже не отражает реализацию.
«Словарь» - это название понятия. Хеш-таблица является возможной реализацией.
Словарь - это собирательный термин для любой реализации структуры данных, используемой для быстрого поиска / вставки. Это может быть достигнуто / реализовано с использованием различных структур данных, таких как хеш-таблица, списки пропусков, дерево rb и т. Д. Хеш-таблица - это конкретная структура данных, полезная для многих целей, включая реализацию словаря.
Словарь использует ключ для ссылки на значение непосредственно внутри из ассоциативного массива .
т.е. (KEY => VALUE)
Хэш чаще описываются как хэш - таблица , которая использует хеш - функцию для вычисления позиции в памяти (или более легко массива) , где значение будет. Хеш примет KEY в качестве входных данных и даст значение в качестве выходных. Затем вставьте это значение в индекс памяти или массива.
т.е. KEY => HASH FUNCTION => VALUE
Я думаю, что один прямой, а другой нет. Хеш-функции также могут быть несовершенными и иногда могут предоставлять индекс, ссылающийся на неправильное значение. Но это можно исправить.
Лучшее место для поиска: Википедия ( ассоциативный массив и хеш-таблица )
unordered_map
показать, что они делают, а не то, что они есть.