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] == empty in der while-Bedingung muss status[newpos] != empty heissen.



  • hustbaer schrieb:

    Glaskugel sagt status[newpos] == empty in der while-Bedingung muss status[newpos] != empty heissen.

    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


  • Mod

    pepschi schrieb:

    hustbaer schrieb:

    Glaskugel sagt status[newpos] == empty in der while-Bedingung muss status[newpos] != empty heissen.

    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] == empty in der while-Bedingung muss status[newpos] != empty heissen.

    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.


Anmelden zum Antworten