How to implement the Redo and Undo algorithms ?
Think of the operations you do in terms of commands. You react to the UI by creating such commands, then dispatching them to a processor class which reacts to them. You keep a stack of all the commands you processed. Each command should encapsulate enough data to allow you to reverse it (for example, translation should store the origin, add object should store a reference to the added object, etc.).
Once you have that architecture in place, it's straighforward to implement undo and redo.
How to save the map, in what format and structure ?
Define map? And that really depends on your engine and the features you support.
I started to write an answer, but figured it's a topic on its own, so be more specific in what you want to export.
How to select faces, vertices, and transform them around ?
Hmmm.... Any particular reason you want to move faces around? That's what we have Maya for.
It's not difficult. Implement picking to detect which face/vertex was chosen, then update the corresponding vertices location in the vertex buffer.
Take a look here - http://ogldev.atspace.co.uk/www/tutorial29/tutorial29.html.