La funzione hash dovrebbe ritornare
SOLO il valore hash, perche' lo stesso valore potrebbe essere utilizzato per fare cose diverse.
Altro problema: l'implementazione che hai utilizzato, non e' gran che.
Ricordati il concetto di
collisione: hai una
collisione quando due chiavi generano lo stesso valore hash.
Cosi' come hai scritto la funzione, "ab" e "ba" generano lo stesso valore hash, il che non e' una grande idea. Ma, ovviamente, e' pure peggio di cosi' !
Devi ingegnarti a trovare una funzione
piu' furba che cerca, in qualche modo, di ritornare numeri diversi per chiavi che differiscono non solo per i caratteri usati, ma anche per l'ordine.
Ci sono seri studi su come realizzare una funzioni hash che riduca al minimo le collisioni (vengono usate massicciamente in campo crittografico), ma non ti serve una cosa complicata, ma solo qualcosa di un po' piu' intelligente.
Che errore strano ti segnala?
Perche' da me questo funziona:
#include <iostream>
struct Libro {
int i;
Libro(){ }
};
struct S
{
static const int tableSize = 5;
Libro t[tableSize];
};
int main(int argc, char **argv)
{
S s;
s.t[4].i = 1;
std::cout << s.t[4].i << "\n";
}
Stai usando una versione del compilatore raggionevolmente recente?