2016-10-18 5 views
-2

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

Теперь, если бы не было дубликатов я мог бы просто сделать: -

unordered_map<int,int>hash; 

for(int i=0; i<size; i++){ 
hash[arr[i]] = arr[i]; 
} 

, но я не уверен, что делать в случае повторных ключей и значений. Любая помощь будет высоко оценена.

+2

Вы хешируете int? – UKMonkey

+0

Является ли 'hash [arr [i]] = arr [i]', что вы на самом деле означаете здесь? Если значение и ключ - одно и то же, почему бы не использовать 'multiset' или' unodered_multiset'? –

+0

Является ли цель вашей хэш-таблицы * ключом * порядковым номером массива или значением, хранящимся в этом порядковом номере? Он * выглядит так, как будто вы хотите использовать значение. Ответ на этот вопрос очень важен, как вы это делаете. Если хешмап просто вводит значение массива, то вы можете набирать количество совпадений просто '++ hash [arr [i]];' в вашем цикле, а не в том, что у вас есть сейчас. – WhozCraig

ответ

1

Это зависит от того, чего вы хотите достичь. Используйте std::unordered_multimap. Или подсчитайте количество повторений и сохраните их в значении карты.

0

Для нетривиальных хэшей; экземпляр, который был хэширован, обычно сохраняется вместе с хешем.

Это позволяет тестировать столбец == или <. Если есть столкновение, где hash(a) == hash(b) & & a != b, то вы либо изменяете хэш, чтобы столкновение больше не существовало, либо имело hash -> vector; или некоторая комбинация 2. Зависит именно от того, для чего вы хотите использовать хэш.

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

  • Нет связанных вопросов^_^