2013-08-02 3 views
2

Почему мне нужно реализовать как оператор ==, так и случайный оператор, возвращающий size_t? И что должен вернуть метод, возвращающий size_t?Почему оператор == недостаточно для std :: unordered_map? - C++

EDIT: Когда я сказал случайного оператора, я не имел в виду, что это бесполезно. Я имел в виду, что, на мой взгляд, я не вижу, что у него есть, поэтому последний вопрос. 7

+1

http://en.wikipedia.org/wiki/Hash_table –

+6

Вам не нужен случайный оператор. Вам нужно реализовать хеш-функцию, возвращающую «размер» для данного экземпляра ключа. Это потому, что 'unordered_map' является хэш-картой. – juanchopanza

+0

Что он использовал? @juanchopanza –

ответ

4

Хешированный контейнер (хэш-таблица, hashmap, неупорядоченная карта) использует хеш-функцию для генерации единственного целочисленного значения для представления индекса (или ключа) для записи. Это приводит к очень быстрому поиску, поскольку (при условии, что мы имеем хорошее распространение значений хэша), когда у нас есть хеш, нам просто нужно посмотреть на этот индекс. Большинство других методов хранения означает сравнение множества вещей, пока не будет найден правильный элемент.

Существует только два правила о хеш-ключах: 1. Каждый раз, когда вызывается функция хеш-функции, вы получаете тот же ключ для данного входа. 2. Значение отличается для разных входных данных - оно НЕ ИМЕЕТЕ быть уникальным, но чем больше вы получаете схожий ввод, тем лучше.