2014-02-17 28 views
0

我正在創建一個哈希表,並且需要使用不同的哈希函數測試此鏈接哈希表。 我有哈希結構如使用此類別中某個函數的另一個類或結構中的函數

struct Hasher { 
    virtual int hash(std::string s, int N) = 0; 
}; 

struct SumHasher : Hasher { 
    int hash(std::string s, int N){ 
     int result = 0; 
     for (int i=0; i<s.size(); ++i) 
      result += s[i]; 
     return int (std::abs((int)result)) % N; 
    } 
}; 
struct ProdHasher : Hasher { 
    int hash(std::string s, int N) { 
     int result = 1; 
     for (int i=0; i<s.size(); ++i) 
     result *= s[i]; 
    return int (std::abs((int)result)) % N; 
    } 
}; 
struct ShiftHasher : Hasher { 
    int hash(std::string s, int N){ 
    const int shift = 6; unsigned z = 0; 
    const int mask = ~z >> (32-shift); // lower 6 bits on 
    int result = 0; 
    for (int i = 0; i < s.length(); i++) 
     result = (result << shift) | (s[i] & mask); 
    return int (std::abs((int)result)) % N; 
    } 
}; 

現在怎麼我可以通過創建一個struct散列類型,然後通過該對象的構造

class ChainedHashTable 
{ 

    ListNode **T; // array of linked lists 
    int capacity; 
public: 
    Hasher *myhash; 
    int info; 
    ChainedHashTable(int numberOfChains, Hasher *myHasher){ 
     myhash = hasher; 
     capacity = numberOfChains; 
     T = new ListNode* [capacity]; 
     for (int i=0; i<capacity; ++i) 
      T[i] = NULL; 
    } 
....... 
void ChainedHashTable::insert(std::string key, int info){ 
    int h = myhash::hash(key, capacity); 
    T[h] = ListNode::make(key, info, T[h]); 
} 
+0

'myhash-> hash(key,capacity)'? – user1520427

+0

myhash-> hash(key,capacity) – user534498

+0

WOW THANKS,那是我的愚蠢...... – Tangleman

回答

1

你應該使用使用Hashtable類中此功能:

myhash->hash(key, capacity) 
+0

其實我只是意識到這不起作用,我需要首先創建這個struct類,然後將該對象作爲參考傳遞給Hashtables構造函數。 – Tangleman

+0

不要緊,我可以把對象作爲&對象,所以它的指針。謝謝你的答案! – Tangleman

+0

@Tangleman如果答案有幫助,請將其標記爲已回答。 – Dinesh

相關問題