I need to create a hash table that has a key as a string, and value as an int. I cannot use STL containers on my target. Is there a suitable hash table class for this purpose?
相关问题
- Sorting 3 numbers without branching [closed]
- How to compile C++ code in GDB?
- Why does const allow implicit conversion of refere
- thread_local variables initialization
- What uses more memory in c++? An 2 ints or 2 funct
相关文章
- Class layout in C++: Why are members sometimes ord
- How to mock methods return object with deleted cop
- Which is the best way to multiply a large and spar
- C++ default constructor does not initialize pointe
- Selecting only the first few characters in a strin
- What exactly do pointers store? (C++)
- Converting glm::lookat matrix to quaternion and ba
- What is the correct way to declare and use a FILE
It's a moot point since STL has no hash table container; std::map would be the alternative. For most purposes there is no reason not to use std::map. For uses that require a hashtable, boost::unordered_map is the best choice (and I think matches the hashtable defined in the new C++ TR1 proposed standard. Some compilers -- but I can't name them -- may provide the TR1 hashtable as std::tr1::unordered_map
Here's a quick a dirty C hash I just wrote. Compiles, but untested locally. Still, the idea is there for you to run with it as needed. The performance of this is completely dependant upon the keyToHash function. My version will not be high performance, but again demonstrates how to do it.
If you need maximum performance, use MCT's
closed_hash_map
or Google'sdense_hash_map
. The former is easier to use, the latter is more mature. Your use case sounds like it would benefit from closed hashing.In the case that you know your list of keys ahead of time (or some superset thereof), you can use a perfect hash function generator like
gperf
.gperf
will spit out either C or C++ code.(You may need to do some work to actually build a container, given the hash function, though.)
You might want to check out glib hash tables
http://library.gnome.org/devel/glib/stable/glib-Hash-Tables.html
You can use the unordered associative container from Boost, aka.
boost::unordered_map
, which is implemented in terms of a hash table.