Я знаю, что это старый вопрос, но, возможно, кто-то может добавить дополнительные идеи.
Примечание: следующее действительно имеет смысл только для определенного подмножества вариантов использования:
Если требование включает сильно перекрывающихся наборов ключей (в крайнем случае один и тот же набор ключей для всех карт), тогда очень эффективным решением может быть "экстернализация" ключи относительно карт и карты содержат только значения в массиве.
Реализация не должна зависеть «структурно» от коэффициента перекрытия, но моя производительность работает тем лучше, чем больше перекрытия ключей. Как и следовало ожидать.
Я не могу дать точную информацию о моей реализации, но важно иметь подходящий механизм для преобразования ключей (хранящихся вне вашего объекта карты) в индексы в массив значений, а также позволяющий массиву значений оставаться компактный , т.е. имеет длину пять, если ваша карта содержит пять отображений.
Скажите, что ключи для всех таких карт находятся на отдельной карте, сопоставленной с числами. Тогда нужно иметь возможность связать числа и индексы массивов.
Извините, если это не достаточно конкретно, но я подумал, что идея интересна и проста в то же время, и может быть использована в качестве альтернативного направления при разработке карты с эффективным использованием памяти.
Опять же, он по своей природе подходит для случаев использования с высоким перекрытием клавиш, но сам по себе является общим. Может сильно страдать от проблем с производительностью, если перекрытие слишком мало, в зависимости от деталей реализации.