¿Alguien sabe de un enlace con algún algoritmo o código fuente de cómo implementar una tabla hash, estilo std::map, donde la clave siempre sea un string?
Hola!
Para hacer un hash, puedes hacer un sumatorio de los valores del string con factores primos... a ver, si quieres hacer un hash de dos numeros, por ejemplo puedes hacer 701*a+b. esto lo podrias pasar al string sin muxos problemas. Seguro q en internet hay algoritmos mas avanzados, pero este funciona bastante bien!
Haber si de memoria me sale:
template < int n_Nodos=32000 > class CHash
{
CMyStringList Nodo[n_Nodos]; // la de microsoft esta bien sino cualquiera
// yo en particular tengo una que tambien permite busqueda binaria
int Codigo(const char *s)
{
static int Desplazamientos[8] = { 0, 5, 10, 1, 6, 11, 2, 7 };
char *c;
int v=0,j=0;
c=s;
while(*c) { v^= int(*c-'a') << Desplazamiento[j++]; c++}
return v%n_Nodos;
}
public:
void Vaciar(void)
{
for(int i=0; i<n_Nodos; i++) Nodos[i].Vaciar();
}
void Agregar(const char *s)
{
Nodo[Codigo(s)].Agregar(s);
}
void Quitar(const char *s)
{
Nodo[Codigo(s)].Delete(s);
}
const char *Encontrar(const char *s)
{
return Nodo[Codigo(s)].Buscar(s);
}
};
De esta forma consigo un spread del 25%, en el lenguaje ingles al menos.
Saludos.
PD: CoLSoN2 ..., vos trabajas en RAC?
Edit: Le hice tres correcciones, (al parecer no me salio de primera)
¿RAC?
RACPedian desesperadamente un juego con tabla hash de strings.
Saludos.
pues nop, no sabía ni que existía xD