将相同对象添加到哈希表而不创建多个副本

时间:2017-05-18 22:16:46

标签: c++11

我想多次添加同一个对象,因为对象将有多个键,即:BMW,M5,2015。当我打印表格时,我不想看到3个键的3个结果,我想要仅显示1个结果显示。正确的方法是让节点对象指向数据而不是复制它:

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, "?");
    }
}

实施它的正确方法是什么?我的猜测是将对象添加到表中,然后使每个新节点指向添加的对象:

{{1}}

那么,我如何让newNode指向srcNode?我的方法是否正确?

1 个答案:

答案 0 :(得分:0)

看看这篇文章: http://www.algolist.net/Data_structures/Hash_table/Simple_example 他们在C ++中有一个很好的简单哈希表实现。您当前的实现存在一些结构性问题,我认为您可以从此链接中学习。要扩充此列表中的一个以将其转换为值为指针的哈希表,只需将hashentry值成员更改为指向您选择的任何类型的指针。