Вектор
struct {
int x;
int y;
short value;
}
Значение, вероятно, будет заканчиваться использованием 4 байтов (хотя члены структуры, как правило, дополняются до 32-битных границ) Если у вас действительно мало места и координаты x, y ограничены, вы можете упаковать все это в биты 64-битный int
Если вы добавляете и удаляете точки, тогда может быть случай для списка, но обычно разреженные массивы имеют фиксированный набор точек, или поиск преобладает, и после добавления точек стоит прибегнуть к ним по X, Y.
Если вам нужно добавить много точек И все еще хотеть быстрый доступ по x, y, тогда дерево может стоить посмотреть на