Имея указатель на структуру, мне нужно очень быстро определить, является ли она частью набора (который я должен определить/реализовать самостоятельно). Я могу подумать о такой технике, как Фильтр Блума, но не знаю, как это сделать на указатель.
Решение должно работать на 32- и 64-битной машине.
Редактировать: Все эти указатели (2k-5k из них) указывают на различные случайные адреса памяти, поскольку они нацелены на элемент двусвязного списка, который я не могу контролировать. Это можно перефразировать так: «Как найти в элементе часть доступного только для чтения двухсвязного списка, создав другую структуру в стороне?»
Изменить 2: двусвязный список может расти со временем, но не набор, который я контролирую.
(uintptr_t)
(это приведение гарантированно будет биекцией) и используйте любую технику, которую вы использовали бы для целого числа - person M.M   schedule 17.06.2014uintptr_t
, это может быть очень хорошим началом! Теперь мне нужно выяснить, какую технику (вероятностную или нет) использовать для целого числа. - person Patrick Allaert   schedule 17.06.2014a <-> b <-> c <-> ... <-> z
, у каждого из этих элементов есть адрес в памяти (указатель):0x0000040: a, 0x0000060: b, 0x0001010: c, ... 0x00a0b50: z
. Теперь мне нужно реализовать набор указателей, например:{0x0000040, 0x0001010, 0x00a0b50}
(соответствует: a, c и z), и мне нужно очень быстро выяснить, является ли адрес частью этого набора, например.0x00a0b50
часть этого? =› да (z), это0xffa0b50
часть? =› нет - person Patrick Allaert   schedule 17.06.2014