Для эффективного хранения в зависимости от точного диапазона значений вы можете использовать битовые операции для хранения пар ключ/значение в одном значении: например, если значения действительно малы, вы можете использовать 24bit для ключи и 8 бит для значений, в результате чего одна 32-битная запись. Я считаю, что большинство компиляторов в настоящее время используют 32 или 64-битные выравнивания, поэтому для хранения, например, 32-битных ключей и 16-битных значений, может потребоваться 64-битная запись. Использование простого сжатия также может быть полезно для производительности, если узким местом является шина памяти и пропуски кеша, а не сам процессор.
Тогда это зависит от вида операций, которые вы хотели бы выполнить. Самый простой способ сохранить ключи - это отсортированный массив структур или объединенная запись ley/value, предложенная выше. Это быстро и очень эффективно, но требует поиска O (log n).
Если вы хотите быть немного более причудливым, вы можете использовать perfect hashing, идея состоит в том, чтобы найти хэш-функцию, которая генерирует уникальные значения хэша для каждой клавиши. Это позволяет хэш-карте быть простым массивом, который должен быть только немного больше, чем отсортированный массив, который я предложил выше. Поиск хорошей хэш-функции должен быть относительно быстрым, вы можете сделать это еще проще, сделав массив немного большим и позволяя использовать некоторые неиспользуемые поля в массиве. Here - это реализация идеального хэширования, но я не использовал его сам.
В обоих случаях потребление памяти будет: (количество пар) * (бит на запись) бит, а также сохранение хеш-функции при использовании второго подхода.
** EDIT **
Обновленный после комментария от @FireLancer. Кроме того, добавлено несколько слов о производительности сжатых массивов.
Является ли каждый из 200 «наборов» своей собственной уникальной картой? – WhozCraig
Вы попробовали 'std :: map'? – Galik
@ Galik не так эффективен в пространстве, а особенно не так, как «std :: unordered_map» для этого случая. Мне больше любопытно, была ли какая-то настройка размера ковша. – WhozCraig