Я бы порекомендовал
const int region_size = 16; //powers of two only! 4, 8, 16, 32, 64, etc
const int region_minor = region_size-1;
const int region_major = ~region_minor;
typedef std::array<region_size, std::array<region_size, point> > region; //a 16 by 16 region
std::map<std::pair<int, int>, region> world;
point& getPoint(int x, int y) {
std::pair<int,int> major_coords(x®ion_major, y®ion_major);
region &r = world[major_coords]; //get region
return r[x®ion_minor,y®ion_minor]; //return the point in this region
}
//This creates points/regions as they're needed as well.
Это допускает бесконечное расширение во всех измерениях (включая отрицательные, что трудно сделать с массивами) и пробелы. В зависимости от того, что вы делаете, вы обычно хотите прикоснуться к нескольким точкам в области одновременно, и если у вас есть карта точек, это много лишних затрат памяти и времени. Если вы делаете карту небольших регионов, она использует меньше памяти и времени.