I eine Struktur in C definiert haben, wieComputing Hashwert eines struct in C
folgttypedef struct {
unsigned int size;
unsigned int pool_size;
route _routes[SIZE_OF_FLEET];
request _request_pool[SIZE_OF_PROBLEM];
/* stores which request is contained in which route */
unsigned int _request_map[SIZE_OF_PROBLEM];
} solution;
Ich versuche, eine Hash-Funktion für diese Struktur wie folgt zu definieren
unsigned long long solution_hash(solution const *_sol)
{
unsigned long long hash = 0;
unsigned short c;
unsigned short *reinterpret_sol;
reinterpret_sol = (unsigned short*)&_sol;
size_t size_ = sizeof(solution);
size_t elem_size_ = sizeof(unsigned short);
int len = (int)size_/elem_size_;
for (int i = 0; i < len; i++) {
c = reinterpret_sol[i];
hash += c;
}
return hash;
}
Das Problem ist, Immer wenn ich die Funktion solution_hash aufruft, ändert sich der Hash-Wert derselben Lösung. Aufeinanderfolgende Aufrufe erhöhen den Wert für dieselbe Lösung um 32.
Was ist falsch an diesem Code? Gibt es eine bessere Möglichkeit, eine Hash-Funktion für eine Struktur zu implementieren?
'reinterpret_sol = (unsigned short *) &_sol;' - Sind Sie sicher '&'? Auf jeden Fall sieht es so aus, als würde man die * strikte Aliasing * -Regel brechen. –
Oh, vielen Dank. Ich habe stundenlang versucht, was mit dem Code nicht stimmt, und Sie haben es in weniger als einer Minute herausgefunden :) –
"Gibt es eine bessere Möglichkeit, eine Hash-Funktion für eine Struktur zu implementieren?" Ja, aber es hängt von Hashing-Zielen ab, die noch nicht angegeben sind. – chux