【发布时间】:2017-08-27 16:01:01
【问题描述】:
我正在尝试使用智能指针创建一个哈希表,但我不确定我是否做得对。我一直在尝试使用它们的两种组合,但恐怕我不知道如何将表格初始化为空?也许这是错误的措辞,但我被困住了,我需要指出正确的方向。
我的哈希节点:
struct{
hashNode(int k, std::string i) : key(k), item(i){};
int key;
std::string item;
}
我的哈希表:
class Hashtable
{
public:
Hashtable(); //not sure how to build the constructor build an empty table.
int hashFunction(int key);
int find(int key);
void insert(int key, std::string item);
void remove(int key);
private:
int tableSize = 10;
std::shared_ptr<std::shared_ptr<hashNode>> hashTable;
//std::vector<std::shared_ptr<hashNode>> hashTable;
};
我被困在这里,因为我不知道我是否正确实现了我的哈希表。或者,如果这只是一个坏主意。任何建议都可以。
【问题讨论】:
-
std::shared_ptr<std::shared_ptr<hashNode>>你肯定不想这样。 -
小心共享指针。除非您确实拥有拥有多个所有者的对象,否则它们很少是您想要的。如果只有一个用户负责删除指针,您需要
std::unique_ptr。 -
好的,假设我正在尝试复制
hashNode **hashtable,就像我在其他示例中看到的那样。这不是一回事吗?我想这就是我感到困惑的地方。实现向量是否更正确? @GuillaumeRacicot -
如果你做对了,根本不需要指针。您只需要一个向量向量 (
std::vector<std::vector<hashNode>>)。 -
@Sailanarmo 唯一指针更好,但在指向数组时有不同的语法。共享指针不支持数组。请参阅文档。
标签: c++ vector hashtable smart-pointers