Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Haszowanie

Ostatnio zmodyfikowano 2014-06-19 18:59
Autor Wiadomość
Nowicjusz
Temat założony przez niniejszego użytkownika
Haszowanie
» 2014-06-18 21:17:11
Cześć, musze napisać program który haszuje zarówno inty jak i stringi dwiema metodami, dodatkowo program musi zawierac metody insert,search i remove. Chciałbym to napisać poprawnie programistycznie, a zatem gdyby obsluga programu wygladala taj jak ponizej, to byloby dobrze?


C/C++
vector < int > dane = getDane();

Hashing < int > * hash = new Metoda1 < int >( dane );
// lub Hashing<int>*hash = new Metoda2<int>(dane);
//To samo ze stringami

//Ponizej przykladowe uzycie metod

hash.insert( 3333 );
hash.remove( 11 );
hash.search( 44 );

Oraz czy daloby sie zrobic, aby metody insert, remove oraz search byly zdefiniowane tylko raz? Nie chcialbym ich przeladowywac, poniewaz jedyna zmiana jaka zachodzi w tych metodach to, wykonywana jest w nich albo metoda z klasy Metoda1 albo z klasy Metoda2, a same metody(remove search insert) sa dosc obszerne.
P-112250
Jacob99
» 2014-06-18 21:26:10
Metoda1 i metoda2 bardzo się różnią?
P-112251
Nowicjusz
Temat założony przez niniejszego użytkownika
» 2014-06-18 22:13:18
metody w klasach Metoda1 i Metoda2 zwracaja rozne wartosci int i tyle. Calosc dla zaluzmy metody remove powinna wygladac mniej wiecej tak(narazie bez szablonow):


C/C++
Class Hashing
{
public:
    void remove( int value );
}


//Hashing cpp
void Hashing::remove( int value )
{
    //kod...
   
    if( Metoda1 )...; // tutaj warunek ze uzylismy klasy Metoda1, jeszce nie wiem jak to napisac moze w klasie Hashing zrobic wskaznik na klase Metoda1 i Metoda2, no ale //nie wiem czy to bedzie poprawne
    else if( Metoda2 )...;
   
    //kod...
   
}

W sumie juz na starcie mam problem bo jezeli chce aby inicjalizacja obiektu klasy Hashing wygladala w taki sposob(mam nadzieje ze to poprawnie napisalem):

C/C++
Hashing * k = new Metoda1();


To Metoda1 musi dziedziczyc po klasie Hashing, a jezeli tak zrobie to nie mam wtedy odwolania do metody klasy Metoda1, no chyba ze zrobie wlasnie wsklaznik w klasie Hashing na Metoda1. Co o tym sadzicie ?
P-112260
libed
» 2014-06-18 23:57:54
Stwórz klasę Hash, która w konstruktorze będzie przyjmować int/enum determinujący metodę haszowania.
P-112269
Monika90
» 2014-06-19 07:37:27
zrób tak jak w bibliotece standardowej lub podobnie:
C/C++
template < class Key, class Hash >
class HashSet
{
public:
    void insert( const Key & );
    void remove( const Key & );
    bool search( const Key & ) const;
   
private:
    Hash hash_;
};

template < class Key > //można jawnie specjalizować dla różnych typów
struct Method1
{
    int operator ()( const Key & ) const
    {
        return 666;
    }
};

template < class Key >
struct Method2
{
    //...
};

int main()
{
    HashSet < int, Method1 < int >> set1;
}
P-112272
Nowicjusz
Temat założony przez niniejszego użytkownika
» 2014-06-19 14:23:16
dzieki Monika ciekawe rozwiazanie, ale czy daloby sie wyeliminowac przypadek gdyby ktos chcial sobie uzyc jednoczesnie dwoch roznych typow ?

P.S wczoraj znajomy zasugerowal mi abym zrobil w klasie Hash metode wirtualna i w zaleznosci od tego czy rzutowalbym(dobrze napisalem?) na klase Metoda1 czy Metoda2, wykonywalaby sie odpowiednia metoda.
P-112314
pekfos
» 2014-06-19 18:23:56
i w zaleznosci od tego czy rzutowalbym(dobrze napisalem?) na klase Metoda1 czy Metoda2, wykonywalaby sie odpowiednia metoda.
To tak nie działa.
P-112332
Nowicjusz
Temat założony przez niniejszego użytkownika
» 2014-06-19 18:55:55
Dobra zrobie to tak jak Monika napisala bo w konstruktorze i tak sie wykonuje metoda klasy bazowej czyli wirtualna.
P-112335
« 1 » 2
  Strona 1 z 2 Następna strona