Löschen/doublehashing
-
Liebe Leute!
wollte fragen, ob ihr mir da vlt weiterhelfen könnt.
hab eine Hashingtabelle via doublehashing. add methode und so funktioniert alles nur scheitere ich egrade bei dem löschen der werte aus meiner tabelle.
könnt ihr mir da vlt weiterhelfen wo mein fehler in der remove methode liegt?!Danke schon im vorhinein
LG
template <typename E> void DoubleHashing<E>::remove ( const E e[],size_t s){ size_t key = hashValue<E>(e); size_t pos; // suchen vom wert pos = key % nmax; if(status[pos]==filled && values[pos] == e) {status[pos] = emptyagain;} else{ size_t newpos; size_t seckey= 2*((hashValue<E>(e))%10)+1; newpos = (pos + seckey) % nmax; while(status[newpos] == empty && values[newpos]!=e){ if((status[newpos] == filled)&&(values[newpos] == e)){ status[newpos]=emptyagain;} else{newpos = (newpos + seckey) % nmax;}; status[newpos] = emptyagain; } } }
-
Glaskugel sagt
status[newpos] == emptyin der while-Bedingung mussstatus[newpos] != emptyheissen.
-
hustbaer schrieb:
Glaskugel sagt
status[newpos] == emptyin der while-Bedingung mussstatus[newpos] != emptyheissen.ja ok ist geändert jedoch schreibt mir der Compilier diese fehlermeldung:
invalid conversion from `const int*' to `int'
initializing argument 1 of `long unsigned int hashValue(const E&) [with E = int]'das wäre diese zeile:
size_t key = hashValue<E>(e);
size_t seckey= 2*((hashValue<E>(e))%10)+1;keine Ahnung warum! :S
-
pepschi schrieb:
hustbaer schrieb:
Glaskugel sagt
status[newpos] == emptyin der while-Bedingung mussstatus[newpos] != emptyheissen.ja ok ist geändert jedoch schreibt mir der Compilier diese fehlermeldung:
Und weißt du, warum dir hustbaer eine ganz andere Antwort gegeben hat? Weil deine Frage nichts taugt. Einfach bloß ein bisschen Code mit der Beschreibung "ist ein Fehler drin" ist keine Frage. Lies dir bitte mal den ersten und den dritten Link in meiner Signatur durch, wie man freiwilligen(!) Helfern durch eine gute Fragestellung möglichst gut entgegen kommt, so dass diese ihre Zeit nicht mit Problemen verschwenden, die gar keine sind.
-
pepschi schrieb:
hustbaer schrieb:
Glaskugel sagt
status[newpos] == emptyin der while-Bedingung mussstatus[newpos] != emptyheissen.ja ok ist geändert jedoch schreibt mir der Compilier diese fehlermeldung:
invalid conversion from `const int*' to `int'
initializing argument 1 of `long unsigned int hashValue(const E&) [with E = int]'Jo. Natürlich tut er das.
Jetzt wäre halt irgendwann angesagt C++ zu lernen.
Oder willst du wegen jeder Zeile fragen?Tip: Guck dir mal die Signatur der "remove" Funktion an, und vergleich die mit der Signatur der anderen Funktionen.
Und wenn du nicht weisst was Signatur bedeutet, dann google es.