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?我的方法是否正確?
爲了澄清,你想要一個哈希表,其中一些元素是對象,一些是指向這些對象的指針?就像「寶馬」可能裝有汽車的地方一樣,但是「2015」和「M5」則指向「寶馬」所擁有的汽車物體? –
既然您標記了C++,爲什麼不使用stl庫? –
您將需要交叉引用數據結構。一個地圖str->對象,和一個地圖對象 - >(str set)。每更新一次,您都必須更新兩者。 –