Все зависит от того, как будет использоваться эта структура: насколько плотно будет заполнена таблица, насколько эффективными должны быть различные операции, насколько большим будет тип полезной нагрузки (Value
) и т. Д.
Ваш первый подход (вектор векторов с картой для перевода индексов) представляет собой плотное представление: каждое значение явно хранится в таблице.Если векторы растут с коэффициентом L, то общий избыток распределения для самих данных может доходить до L ^ 2.Например, если L == 1,25, у вас может оказаться более 50% избыточного хранилища;если sizeof(Value)
большой или если у вас большой стол, это может быть непомерно велико.Кроме того, расширение таблицы может иногда быть довольно дорогим (когда векторы должны быть перераспределены).
Ваш второй подход (карта карт) потенциально редок.Однако если все парные таблицы (строки, столбцы) будут доступны, он станет плотным.Кроме того, бухгалтерская информация для карт немного больше, чем для векторов.Таким образом, для небольших Value
размеров векторный подход может быть более экономичным.Если большая часть вашей таблицы будет заполнена значениями «по умолчанию», то вы могли бы улучшить ситуацию, различая доступ на чтение и запись к таблице: чтение значения может выполнить «поиск» и вернуть синтезированное значение по умолчанию, если заметная записьбыл найден.