2013-03-24 2 views
2

Оба maps и hash_maps сконструированы таким образом, чтобы удерживать pairs от <key, data>. Мне ясно, почему карта должна иметь ключ для ее сортировки (точнее: древовидная структура), но я не понимаю, почему hash_maps нужен ключ, почему его данные не могут быть хэшированы и помещены в хеш-таблицу?C++ std :: hash_map: Какова роль ключа

Я не смог найти ответ ни в документации, ни в поиске по сети.

+0

http://en.wikipedia.org/wiki/Hash_table не ответил на ваш вопрос? – Rapptz

+0

Итак, на карте, почему одни данные не могут использоваться для сортировки (или древовидной структуры)? В обоих случаях модель моделируется как словарь, поэтому вы делитесь на ключевые и связанные данные, потому что это полезная идея, а не по каким-либо причинам. Если вам не нужен ключ, вы моделируете набор, и вы будете использовать std :: set или set :: unordered_set. – john

+0

Карта не содержит ключ для дерева. Карта содержит ключ, потому что это карта. Он отображает ключи в значения. Дерево связано с реализацией. – juanchopanza

ответ

4

std::unordered_set работает именно так, как вы описали. Однако есть моменты, когда вы хотите отображать данные из одной части данных в другую; вот где std::unordered_map вступает в игру.

0

Вы ищете set, где ключ также является данным.

C++ предлагает несколько иной аромат из них: set, unordered_set и т.д ...

4

Прогулка к шкафу. Вытащите телефонную книгу и найдите номер. Он имеет отображение между именем и номером

+0

Вроде :) Но принятый ответ уже занял Алекс, когда он предшествовал. – Subway

+0

Мне нравятся мои метафоры. Они обогатили мою жизнь. Наслаждайтесь –

+0

+1 Отличный ответ. –

0

Hash Карта, которая также называется Unordered Map использует HASH из KEY как index ведра или Slots.In другим словом, любой хеш-таблица нуждается в хэш-функции для вычисления index в массив ведер или слотов, из которых можно найти правильное значение. Эти index являются ключом таблицы хеширования, которые используются для доступа к данным в O (1) раз в лучшем случае.

+0

Я боюсь, что вы ошибаетесь, ключ, который является частью структуры типа пары hash_map, а хэш, являющийся результатом хэш-функции, - это две разные вещи. – Subway

0

Если вы хотите использовать сами данные в качестве ключа, соответствующий контейнер равен std::set или std::unordered_set. Карта содержит как ключ, так и значение; разница между std::map и std::unordered_map находится в как данные организованы; std::map сортирует по ключу, и std::unordered_map хэши ключом.

Смежные вопросы