When should I choose one over the other? Are there any pointers that you would recommend for using the right STL containers?
Another thing to keep in mind is that with hash_set you have to provide the hash function, whereas a set only requires a comparison function ('<') which is easier to define (and predefined for native types).