6.7. Using Hashed Containers
Problem
You are storing keys and values , you need constant-time access to elements, and you don’t need the elements to be stored in sorted order.
Solution
Use one of the hashed associated containers, hash_map
or hash_set
. Be aware, however,
that these are not standard containers specified by the C++ Standard, rather they are
extensions that most standard library implementations include. Example 6-8 shows how to use a hash_set
.
Example 6-8. Storing strings in a hash_set
#include <iostream> #include <string> #include <hash_set> int main() { hash_set<std::string> hsString; string s = "bravo"; hsString.insert(s); s = "alpha"; hsString.insert(s); s = "charlie"; hsString.insert(s); for (hash_set<string>::const_iterator p = hsString.begin(); p != hsString.end(); ++p) cout << *p << endl; // Note that these aren't guaranteed // to be in sorted order }
Discussion
Hashed containers are popular data structures in any language, and it is unfortunate
that C++ Standard does not require an implementation to supply them. All is not lost,
however, if you want to use a hashed container: chances are that the standard library
implementation you are using includes hash_map
and
hash_set
, but the fact that they are not standardized
means their interfaces may differ from one standard library implementation to the next. I
will describe the hashed containers that are provided in the STLPort standard library
implementation.
Tip
STLPort is a free, portable standard library implementation ...
Get C++ Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.