What is the difference between set and hashset in C++ STL?

kal picture kal · Mar 25, 2010 · Viewed 46k times · Source

When should I choose one over the other? Are there any pointers that you would recommend for using the right STL containers?

Answer

Mark Ransom picture Mark Ransom · Mar 25, 2010

hash_set is an extension that is not part of the C++ standard. Lookups should be O(1) rather than O(log n) for set, so it will be faster in most circumstances.

Another difference will be seen when you iterate through the containers. set will deliver the contents in sorted order, while hash_set will be essentially random (Thanks Lou Franco).

Edit: The C++11 update to the C++ standard introduced unordered_set which should be preferred instead of hash_set. The performance will be similar and is guaranteed by the standard. The "unordered" in the name stresses that iterating it will produce results in no particular order.