Dafür hast Du ein new pro Tile und cache-feindliche Zugriffsmuster bei jedem Drüberiterieren. Und der Speicher-Overhead einer Map ist auch nicht zu verachten, speziell im Vergleich zu den Nutzdaten, die hier ja nur ein Tile wären.
Nimm ein 2D-Array, oder bau Dir eins aus einem std::vector. Das Vergrößern und Verkleinern ist dann eine Reallokation und Umkopieren, aber das taucht bis zu einer Größe von ein paar Hundert Tiles ins Quadrat nichtmal im Profiler auf. Das Array kannst Du stressfrei auch mit einem internen Koordinaten-Offset ausstatten, so dass Deine Map auch ins Negative wachsen kann. Und dann vergrößerst Du nur in größeren Schritten wie z.B. 16 Tiles auf einmal, und alles ist gut.
Denk aber unbedingt an die multiplen Layer. Nach meiner Erfahrung sind die eher alle als die Map-Größe. Bei Splatter haben wir 8 Tile-Layer, plus einen Layer Trümmer zwischen L3 und L4, einen Layer für editor-platzbierbare Decals (ebenso L3-L4) und einen Objektlayer (ganz oben drauf >L7), wo dann obendrauf aber nochmal extra der Spieler und Partikel draufgepinselt werden. Und selbst das Konstrukt ist bisweilen eng geworden.