Как получить элементы, используя значения хеша в контейнерах хеша STL? - PullRequest
0 голосов
/ 05 июня 2018

Я использую неупорядоченный набор для хранения строк.Здесь можно иметь разные строки, чтобы иметь одно и то же хеш-значение, поэтому я должен добавить в связанный список для этого хеш-значения.Поддерживается ли это в C ++ stl unordered_set.

std::unordered_set<std::string, hashFunction> m_Dictionary;

Я вставил «мир: который имеет хеш-значение 4 и другое слово« HellO », которое имеет хэш-значение 4, поэтому оба должны идти в словарь. Как мы можемдостигните этого.

Другое требование заключается в том, что я хочу искать по строке, если строка присутствует в словаре, она должна возвращать true.

Также я хочу искать по значению хеша, т.е. 4, тогда я долженполучить вывод как "мир" и "HellO".

Это может быть достигнуто с помощью unordered_set или unordered_map. Я хочу использовать хеш-контейнеры STL.

В основном я хочу искать, используя строки и схэш-значение. Если хеш-значение имеет несколько строк, то мы должны напечатать все строки с этим хеш-значением. Я ищу пример кода, как мы можем достичь этого.

Я знаю, что мы можем сделать это без использованияХеш-контейнеры STL, мне интересно, возможно ли это с хеш-контейнерами STL.

Спасибо за помощь.

1 Ответ

0 голосов
/ 05 июня 2018

Контейнер хеша уже поддерживает объекты с таким же хешем.По сути, все они помещаются в подсписок и подвергаются линейному поиску, поэтому, если ваш хэш плохой, это дороже.Вы не можете выполнять поиск по хеш-значению в stl.

Если вам действительно нужно использовать хеш-значения, вам нужно поместить обертку вокруг unordered_multimap, проиндексированного целым числом, где ваша обертка хэшируется к ключу,который будет хранить несколько значений в одном ключе.Вы можете использовать equal_range (), чтобы вернуть пару итераторов, охватывающих общий ключ.

...