A recent talk about
Don't forget the
map's keep their elements ordered. If you can't give up that, obviously you can't use an
Something else to keep in mind is that
unordered_map's generally use more memory. A
map just has a few house-keeping pointers then memory for each object. Contrarily,
unordered_map's have a big array (these can get quite big in some implementations) and then additional memory for each object. If you need to be memory-aware, a
map should prove better, because it lacks the large array.
So, if you need pure lookup-retrieval, I'd say an
unordered_map is the way to go. But there are always trade-offs, and if you can't afford them, then you can't use it.
Just from personal experience, I found an enormous improvement in performance (measured, of course) when using an
unordered_map instead of a
map in a main entity look-up table.
On the other hand, I found it was much slower at repeatedly inserting and removing elements. It's great for a relatively static collection of elements, but if you're doing tons of insertions and deletions the hashing + bucketing seems to add up. (Note, this was over many iterations.)