When it's time to update the map, the code will go through and call the update function on every object to update their animations, change their position, perform collision detection, etc. The ObjectSupervisor maintains a vector of MapObjects for each object layer.
The MapTile class is a very simple wrapper around a 1D vector. Now we could either create a 2D array for every tile, or we could create a single 2D array and store the layer information for all tiles in there. The TileSupervisor class maintains a vector of tile images, and our layers are nothing more than integers that index into that vector to extract the desired image to draw. The same tile image may be drawn in more than one location, so it's inefficient to store several copies of the images. Our map is built using several layers of tiles, where each layer is like a 2D array. We can have any number of tile/object layers and their draw order can be arranged and re-arranged in any way we like, but for simplicity let's assume we'll always have 3 tile layers and 1 object layer.
Naturally, our tile layers are managed by TileSupervisor while the object layers are managed by ObjectSupervisor. Two of these classes are called TileSupervisor, which manages everything having to do with tiles and tile layers, and the ObjectSupervisor, which manages all of the sprites and the map's collision grid. This class got really big in the past because there's so many different things it needs to do, so we decided to create some helper classes to it that are responsible for handling specific operations on the map. We have a class called MapMode which is the highest level class and implements the main loading, update and draw code. I'll give you a simplified explanation of the class modeling in my own RPG. Typically you don't want to have something like a house be an object, because such a large, static structure is better constructed using tiles (since you can change up the size and display of the house more easily that way). A layer may contain either tiles or objects (sprites). Well typically 2D RPG maps are built using layers. If you want to make an RPG from scratch, be prepared for the enormous amount of time and effort it will take. My project is currently hovering around 250K lines of code that were written (and re-written) over many years. You may think that coding a simple 2D RPG isn't that difficult, but it is. I'll second KnolanCross that if you just want to make a RPG, use one of those tools he listed above.