Термин dictionary
является очень общим и может относиться к любому виду структуры данных. Также вы не сказали, является ли это упорядоченным словарем или неупорядоченным. Существуют все виды бинарных деревьев поиска, сбалансированных различными способами, n-арные деревья, хеш-таблицы, скиплисты и т. Д.
Что касается массивов, прямые плоские массивы занимают пустое пространство, когда они малонаселены. Тем не менее, вы можете реализовать многоуровневые массивы. Первые несколько уровней являются каталогами, и только конечный уровень имеет небольшие массивы.
Таблицы страниц виртуальной памяти часто реализуются таким образом.
Так что получается, что индекс массива, такой как (hex) [0x123456], может быть разбит с помощью операций маскирования на [0x12] [0x34] [0x56]. Выберите верхний каталог, который представляет собой массив указателей на средние каталоги, в которых есть массивы указателей на маленькие таблицы. (Конечно, в действительности, код должен обходить уровни и следить за отсутствующими каталогами и таблицами, а не напрямую индексировать! В этом весь смысл: не создавать целое дерево.)
Не так давно я реализовал наборы символов Unicode в движке регулярных выражений, используя такие типы структур различной глубины для различных ситуаций.
Конечно, это не имеет ничего общего с вашими обычными new int[foo]
C ++ массивами! Но, конечно, может быть скрыт за классом, который выглядит как массив.