2013-05-18 186 views
0

我想實現一個哈希設置,但我有散列函數一些麻煩設置功能。我想在集中添加,有姓名和電話號碼的人:哈希散列

class Person{ 
    string name; 
    long long int phoneNumber; 
} 

和我的索引集由phoneNumber的的數字相加計算。問題是,我不希望我的功能是這樣的:

int add(long long int nr, Element e) - the function that adds an Element to the set 
{ 
    int hashCode = hash(nr);; 
    ... 
} 

其中long long int nr應該是phoneNumber的和Element e應該成爲的人。我的意思是,這很愚蠢。如果我已經有人作爲參數,爲什麼它的phoneNumber呢?正如你可以看到我使用的模板,我的老師建議我做一個虛擬類的散列函數,迫使它是各類型(如Java中的HashSet的東西)。事情是我沒有想法如何做到這一點。你有任何想法可以幫助我嗎?

+0

電話號碼不是整數,這是一串數字。 –

+0

@sftrabbit無論如何!那不是重點。 –

+0

將電話號碼用作索引有點奇怪。電話號碼通常不會識別一個人。有可能以多種方式編寫電話號碼,因此在將電話號碼用作索引之前,需要對電話號碼進行*規範化。最後,如果你想有一個基於電話號碼的查詢,你是關閉使用(散)**地圖**更好,而不是** **設置。 –

回答

0

如果你這樣做:

int add(Person p, Element e) 

你會限制你hastset類是完全依賴於Person類。以這種方式將整數或字符串值放入哈希方法中似乎更合理。您可以確定參數以散列哈希方法之外並將其作爲輸入。

而且,當你的另一成員添加到Person類如年齡和散列使用,你還需要修改使用該特定成員的哈希方法。

+0

@faith_k我想要做的'空加(人* P)'和附加功能,知道如何caculate指數:INT哈希= INT的hashCode(P-> phoneNumber的) –

+0

@MonsterMonster我不明白,什麼是保持你這樣做嗎? –