Я работаю над игрой, и чтобы быть в безопасности, любой пользователь (программист) может хранить идентификаторы только для объектов, а не указателей, и должен использовать этот идентификатор для получения указателя на объект, чтобы нужно какое-то качество в одиночку с ним.
Давайте использовать сценарий наихудшего случая: каждый идентификатор используется. Это 64 бит, так что вы идете: 18446744073709551616 ID для поиска. Большая часть данных хранится в базе данных, и наша программа поиска возвращает либо указатель, либо нулевой указатель. Нулевой указатель означает, что программа должна получить доступ к базе данных для загрузки объекта, после чего у нее будет указатель.
Идеи:
Так что единственный настоящий трюк, который я знаю здесь, - это бинарный поиск. Так что в худшем случае это означает 64 сравнения для каждого поиска идентификатора.
Еще одна идея, которая у меня возникла, - создать статический раздел пространства, дерево, в котором каждая ветвь разделяется на степени 2 ветвей, но только до разумной глубины. Использование побитового оператора в идентификаторе вместо оператора модуля, чтобы выяснить, к какой ветви он принадлежит на каждом уровне. Каждая возможная ветвь в дереве всегда существует, но на некоторой глубине они останавливаются, и бинарный поиск все еще требуется, потому что точное число значений все еще неизвестно.
Какие у вас идеи?