J'ai des valeurs d'ID du type unsigned int
. J'ai besoin de mapper un Id à un pointeur en temps constant.Conversion d'identificateurs d'entier en pointeurs
Key Distribution:
ID aura une valeur dans la plage de 0 à UINT_MAX. La plupart des clés seront regroupées en un seul groupe, mais il y aura des valeurs aberrantes.
Mise en œuvre:
je pensais à utiliser le C++ choses ext hash_map, mais je l'ai entendu leur performance ne soit pas trop grand lorsque les touches ont une vaste gamme de potentiel.
J'ai aussi pensé à utiliser une forme de recherche chaînée (équivalente à une subdivision récursive de la gamme en mandrins C). S'il n'y a pas de clés dans une plage, cette plage pointe vers NULL.
N = Key Range
Niveau 0 (C = divisé en 16, de sorte 16 pièces) = [0, N/16), [N/16, 2 * (N/16)), .. .
Niveau 1 (divisé en C = 16, donc 16 * 16 pièces) = ...
quelqu'un d'autre a des idées sur la façon dont cette cartographie peut être plus efficacement mis en œuvre?
Mise à jour:
En constante, je voulais juste dire chaque recherche clé est pas significativement influencée par le nombre de valeurs dans l'élément. Je ne voulais pas dire que ça devait être une seule opération.
Veuillez également essayer de minimiser l'utilisation de la mémoire (similaire à la recherche chaînée ci-dessus ...). Veuillez ne pas suggérer d'allouer un tableau avec la taille KEY_RANGE;) – jameszhao00