C++11 将同一对象添加到哈希表而不创建多个副本
我想多次添加同一对象,因为对象将有多个键,即:BMW,M5,2015。当我打印表格时,我不想看到3个键的3个结果,我只想看到显示的1个结果。正确的方法是让节点对象指向数据,而不是复制数据: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
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这是为了学习。