В вашем коде много проблем с производительностью. Если узкое место действительно исходит от push_back
, вы должны принять предложение Масуда и вставить указатели на массив, а не значения.
Другое предложение заключается в том, что вы объявляете свои функции и конструкторы для использования ссылок - например:
Tile::Tile(const Tileset& tileset, int tileId, int posX, int posY)
вместо
Tile::Tile(Tileset tileset, int tileId, int posX, int posY)
Передача параметра по значению приведет к созданию копии, которая может быть дорогой. Передача по константной ссылке гарантирует, что объект не будет скопирован или изменен.