复制C++中hashMap的构造

Copy Construction For hashMap in C++

本文关键字:hashMap C++ 复制      更新时间:2023-10-16

在最近的任务中,我们被要求在C++中实现一个哈希映射,而不使用STL中提供的技术。

我正在堆栈其中一个函数——复制构造函数。在谷歌上搜索后,我发现了一个有效的解决方案:

在C++中为哈希映射编写有效的副本构造函数

但我不能完全理解。有人能帮忙解释一下吗?

1.为什么我们需要使用指向指针Node** p = &hashTable[i];的指针

2.while循环中的逻辑是什么

3.特别是,这个代码p=&c->next;是什么意思?

首先,有许多不同类型的哈希表实现,因此您在网上找到的任何特定的哈希表都可能会也可能不会深入了解您需要为自己的实现做什么。也就是说。。。

  1. p最初指向bucket的head元素,即[this->]hashTable[i]处的Node*。它最初用于将其设置为NULL。当您处理Node*时,Node**是跟踪其位置的自然方法。

  2. CCD_ 10循环的每次迭代复制CCD_ 13中的桶CCD_ 12中的下一个CCD_;在c在新存储器中创建副本并且*p(其跟踪正在为正在构建的*this对象创建的链表位置)被更新以指向该位置。

  3. p=&c->next;意味着p被设置为新创建的Nodenext成员(地址为c):该next指针必须由Node(const Node&)构造函数初始化为nullptr/NULL/0,否则创建的链表将无法正确终止。只有当冲突元素的链表中有更多的元素要复制时,下一次迭代才会用c的下一个值覆盖*p,从而覆盖先前添加的Nodenext成员。

总之,您看到的是一个复制amountOfBuckets链表的循环。如果您不熟悉链表操作,最好先编写一个链表类并使其发挥作用,然后使用它来帮助实现哈希表。