C++11 将同一对象添加到哈希表而不创建多个副本

C++11 将同一对象添加到哈希表而不创建多个副本,c++11,C++11,我想多次添加同一对象,因为对象将有多个键,即:BMW,M5,2015。当我打印表格时,我不想看到3个键的3个结果,我只想看到显示的1个结果。正确的方法是让节点对象指向数据,而不是复制数据: struct Node { Car * car_; Node * next; } 正确的实施方法是什么?我的猜测是将对象添加到表中,然后使每个新节点指向添加的对象: void hashTable::insert(Car * car_) { char key[200]; cha

我想多次添加同一对象,因为对象将有多个键,即: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呢?我的方法正确吗

看看这篇文章:
他们在C++中实现了一个简单的哈希表。您当前的实现存在一些结构性问题,我认为您可以从这个链接中学习。要扩充此列表中的一个,将其转换为值为指针的哈希表,只需将hashentry值成员更改为指向所选类型的指针

看看这篇文章:
他们在C++中实现了一个简单的哈希表。您当前的实现存在一些结构性问题,我认为您可以从这个链接中学习。要扩充此列表中的一个,将其转换为值为指针的哈希表,只需将hashentry值成员更改为指向所选类型的指针

为了澄清,您是否想要一个哈希表,其中一些元素是对象,一些是指向这些对象的指针?比如“宝马”可能持有一辆车,但“2015”和“M5”然后指向“宝马”持有的汽车对象?既然你贴上了C++,为什么不使用STL库?你需要交叉引用数据结构。一个映射str->objects和一个映射object->(strset)。每次更新时,您都必须对其进行更新。@JaysonBoubin不,我希望所有内容都是指针。@LiranFunaro这是为了学习。为了澄清,您是否需要一个哈希表,其中一些元素是对象,一些元素是指向这些对象的指针?比如“宝马”可能持有一辆车,但“2015”和“M5”然后指向“宝马”持有的汽车对象?既然你贴上了C++,为什么不使用STL库?你需要交叉引用数据结构。一个映射str->objects和一个映射object->(strset)。每次更新时,您都必须对其进行更新。@JaysonBoubin不,我希望所有内容都是指针。@LiranFunaro这是为了学习。