Я хочу сконденсировать список из 100 неотрицательных 32-битных целых чисел в одно целое число. В идеале результирующее целое всегда уникально, но допустимо несколько относительно редких столкновений. Как это сделать?Представить список целых чисел как одно целое число в C++
Я пишу головоломку. Часть моего алгоритма поиска позволяет избежать повторного изучения состояний головоломки, которые уже видели. Я буду использовать целое число, сгенерированное из списка, в качестве ключа в таблицу statesAlreadySeen
. В настоящее время я использую строки в качестве ключей. Однако я видел заметные улучшения производительности при переходе от строковых ключей к целым ключам в map<,>
, поэтому я хотел бы переключиться.
Редактировать: Спасибо за неупорядоченные предложения карты! Однако мне все еще интересно узнать о фактической хэш-функции. IIRC - простая функция, включающая базовую манипуляцию бит и xoring. Было бы замечательно видеть это и иметь общее понимание вероятностей столкновений.
Вам необходимо использовать [* хэш-функцию *] (http://en.wikipedia.org/wiki/Hash_function). –
@OliCharlesworth пост в качестве ответа, ему не нужно больше деталей – djechlin
Что-то вроде 'boost :: hash_range' должно передать основную идею ... –