No. If a container is never accessed concurrently in more than one
thread, and its contained elements are built-in types, then use
std::vector unless in extraordinary circumstances.
If the contained elements have non-throwing
move-constructor/move-assignment-operator then also strongly consider
std::vector unless the internal implementation of the element is mainly
constructed on the heap, in which case you will be suffering cache
misses anyway and if you are frequently inserting/removing elements
other than at the end of the vector you might get better performance
with another container. But profile first.
Don't use ordered associative containers unless profiling shows they are
better (they almost always aren't even when you think they should be).
There is a reason why smalltalk is slow. Treat the unordered
associative containers with suspicion, but they do have good use cases.
Use std::list with splicing/unsplicing to minimize contention if a
queue-type or stack-type container may be accessed/modified
concurrently by more than one thread, to minimize contention on locks,
particularly if the element has a non-throwing move constructor. The
gain from reduced contention will generally more than offset additional
cache misses if contention would otherwise cause scalability issues.
Chris