Мне нужно создать таблицу поиска для имен функций C (в качестве клавиш), чтобы указатели функций (в качестве значений).Я имею в виду использование контейнера hash_map
в STL, поскольку время доступа к хеш-таблице составляет O(1)
.Есть ли хорошая хэш-функция для этого?В настоящее время я использую (31*H + c)
в качестве своей хэш-функции.
Кроме того, hash_map
STL заботится о коллизиях, или я должен заботиться о них в своем коде?Пожалуйста, приведите несколько примеров, если это возможно.
Пример кода, над которым я сейчас работаю
#include <iostream>
#include <ext/hash_map>;
using namespace std;
using namespace __gnu_cxx;
namespace __gnu_cxx {
#ifndef __HASH_STRING__
#define __HASH_STRING__
template <>
struct hash<string> {
size_t operator() (const std::string& s) const
{
size_t h = 0;
std::string::const_iterator p, p_end;
for(p = s.begin(), p_end = s.end(); p != p_end; ++p)
{
h = 31 * h + (*p);
}
return h;
}
};
#endif
};
int main()
{
hash_map<string, int> months;
months["january"] = 1;
months["february"] = 2;
months["march"] = 3;
months["april"] = 4;
months["may"] = 5;
months["june"] = 6;
months["july"] = 7;
months["august"] = 8;
months["september"] = 9;
months["october"] = 10;
months["november"] = 11;
months["december"] = 12;
return 0;
}