I think he's looking for a way to save and load maps from a file, not a way to store them in memory. (Or maybe I misunderstood ?)
IMHO there are four paths to handle this problem.
Extremum: Create your own format
You can create you own file format. The easiest way would be to choose a widely used and extensible file format (such as XML) since you'll find tons of parsers freely available on internet. (head to applied-mathematics.net for simple yet complete XML parser).
The problem here is that you'll have to create your own map editor.
No doubt this is the "best" way if you want to learn tons of things, and have a clean format. But you also have to consider the time that you'll need to spend creating all these tools.
Extremum: Use the format of an other game/tool
You can also choose to use the file format of an existing game, and retro engineer it (or simply use the format of an open source game, such as Quake).
The problem here is that you'll inherit from the limitations of the format you chose.
But the development time is quite reduced, you only need to find a way to load these formats.
Tradeoff 1: Decouple geometry from meta data
You can also choose to pick the things you need from an existing format, and to store your meta data elsewhere.
For instance you could use create a format that would look like:
<?xml version="1.0" encoding="UTF-8"?>
<map>
<name>MyMap</map>
<geometry type="bsp">my_map.bsp</geometry>
<spawn id="1">
<monster type="1" spread="5" />
</spawn>
</map>
Here you have the best from the two worlds.
You can design you map in any .bsp editor (3DSmax, Blender), and store the data you need in XML.
Middle 2: Adapt other's formats to your needs
The idea here is just to create your own unified format, and create exporters for widely used editors. You can for example write exporter scripts for Blender, that would generate files for you own format.
Just some more tips if I misunderstood and you were looking for memory storage of your maps. (In case just ask and i will complete my answer :))
- Look for Quad/Octrees. It's a way to cut you map into quads/cubes. Then you'll be able to implement fast search in these structures, and so display only viewable parts of the maps, LOD, etc..
- Fasten map loading by choosing a file format close to the memory layout of your map.
- Combine multiple map-storing paradigms. Heightmaps are nice for bigs outdoor maps, but are very limited (espacially for multilevel maps). You could use heightmaps for the floor, and store rocks/flowers is quadtrees, etc.