2017-05-18 60 views
1

我想多次添加同一對象,因爲對象將擁有多個鍵,即:BMW,M5,2015。當我打印表格時,我不想查看3個鍵的3個結果,我只想看到只顯示1個結果。正確的做法是讓節點對象指向數據而不是複製它:在不創建多個副本的情況下將相同的對象添加到散列表中

struct Node 
{ 
    Car * car_; 
    Node * next; 
} 

什麼是實現它的正確方法?我的猜測是,每一個新的節點添加點對象表中,然後對要添加的對象:

void hashTable::insert(Car * car_) 
{ 
    char key[200]; 
    char curr[100]; 
    car_->getKeywords(key); 

    char * token; 
    token = strtok(key, ","); 

    Node * srcNode = new Node; 
    Node->car = car_; 
    Node->next = NULL; 

    int index = calculateIndex(token); 

    srcNode->next = table[index]; 
    table[index] = srcNode; 
    size++; 

    while (token != NULL) 
    { 
     int index = calculateIndex(token); 

     Node * newNode = new Node(); 
     newNode->car = srcNode->car; //How to make this node point to scrNode? 

     newNode->next = table[index]; 
     table[index] = newNode; 
     size++; 
     token = strtok(NULL, "?"); 
    } 
} 

那麼,如何會讓newNode指向srcNode?我的方法是否正確?

+0

爲了澄清,你想要一個哈希表,其中一些元素是對象,一些是指向這些對象的指針?就像「寶馬」可能裝有汽車的地方一樣,但是「2015」和「M5」則指向「寶馬」所擁有的汽車物體? –

+0

既然您標記了C++,爲什麼不使用stl庫? –

+0

您將需要交叉引用數據結構。一個地圖str->對象,和一個地圖對象 - >(str set)。每更新一次,您都必須更新兩者。 –

回答

0

看一看這篇文章: http://www.algolist.net/Data_structures/Hash_table/Simple_example 他們在C++中有一個很好的實現簡單的哈希表。您當前的實施有一些結構性問題,我認爲您可以從此鏈接中學習。爲了擴充這個列表中的一個,將它變成一個哈希表,其中的值是指針,只需將hashentry值成員更改爲指向您選擇的類型的指針即可。

相關問題