打印C++;哈希表 我对C++很陌生,我想教自己如何实现哈希表(我知道我可以使用无序的映射,但是我在挑战自己)。现在我有一个结构向量(cell),它保存了特定于个人的信息。我有一个PrintTable函数,我想用它打印出表中每个项的每个结构
打印C++;哈希表 <>我对C++很陌生,我想教自己如何实现哈希表(我知道我可以使用无序的映射,但是我在挑战自己)。现在我有一个结构向量(cell),它保存了特定于个人的信息。我有一个PrintTable函数,我想用它打印出表中每个项的每个结构成员。但是,我似乎无法访问结构(单元格)的特定成员。我做错了什么打印C++;哈希表 我对C++很陌生,我想教自己如何实现哈希表(我知道我可以使用无序的映射,但是我在挑战自己)。现在我有一个结构向量(cell),它保存了特定于个人的信息。我有一个PrintTable函数,我想用它打印出表中每个项的每个结构,c++,C++,打印C++;哈希表 我对C++很陌生,我想教自己如何实现哈希表(我知道我可以使用无序的映射,但是我在挑战自己)。现在我有一个结构向量(cell),它保存了特定于个人的信息。我有一个PrintTable函数,我想用它打印出表中每个项的每个结构成员。但是,我似乎无法访问结构(单元格)的特定成员。我做错了什么 #include <iostream> #include <string> #include <vector> struct cell {
#include <iostream>
#include <string>
#include <vector>
struct cell
{
std::string name;
int age;
std::string weapon;
};
class HashTable
{
private:
std::vector<cell> *table;
int total_elements;
int getHash(int key)
{
return key % total_elements;
}
public:
HashTable(int n)
{
total_elements = n;
table = new std::vector<cell>[total_elements];
}
void SearchTheTable(int hashIndex);
void AddItem(std::string name, int age, std::string weapon);
void RemoveItem();
void PrintTable();
};
void HashTable::SearchTheTable(int hashIndex)
{
int x = getHash(hashIndex);
std::cout << x;
}
void HashTable::AddItem(std::string name, int age, std::string weapon)
{
cell newCell = { name, age, weapon };
table->push_back(newCell);
}
void HashTable::RemoveItem()
{
}
void HashTable::PrintTable()
{
for (int i = 0; i < table->size; i++)
{
std::cout << table[i].name; // Right here I get an error that says: class "std::vector<cell, std::allocator<cell>>" has no member "name".
}
}
int main()
{
HashTable theTable(5);
theTable.AddItem("Ryan", 27, "Sword");
theTable.AddItem("Melony", 24, "Axe");
theTable.PrintTable();
}
#包括
#包括
#包括
结构单元
{
std::字符串名;
智力年龄;
弦武器;
};
类哈希表
{
私人:
std::vector*表;
int总元素;
int getHash(int键)
{
返回键%total_元素;
}
公众:
哈希表(int n)
{
元素总数=n;
表=新标准::向量[总元素];
}
无效搜索表(int hashIndex);
void AddItem(std::string name,int age,std::string武器);
void removietem();
void PrintTable();
};
void HashTable::SearchTheTable(int hashIndex)
{
int x=getHash(hashIndex);
标准::不能推回(新电池);
}
void哈希表::removietem()
{
}
void HashTable::PrintTable()
{
对于(int i=0;isize;i++)
{
STD::如果你正在学习C++,那也是很棒的,这也是学习模板的好机会,所以这个表不是“代码> Cys< /Case>特定的。它不是必需的,也不建议你的代码< STD::vector < /代码>作为指针。你可以总是初始化一个属性,但是你喜欢使用A。它同时使用了两个代码,也变得奇怪。>std::vector
和新建[]
一起。这应该是std::vector
,您可以消除所有手动分配。值得注意的是,这种结构是不完整的:如果您分配内存,您最终必须释放它,因为您需要一个析构函数。您想要一个每个索引都有一个元素的单级哈希表,还是这是一种链式方法不止一种方法可以占用索引?两者都有各自的位置,但您似乎使用了每种方法中的一点,其中这些方法具有非常不同的内部结构。有两种策略可以起作用:当发生冲突时,您增加表的大小并重新刷新现有内容以将其展开,或者当发生冲突时,您只是将其链接起来到该位置的数组/链表。您需要选择一个。如果您只做一个级别,那么std::vector
很好,没有指针,没有内部结构。如果发生冲突,您可以调整大小并重建表。值得注意的是,在这里选择适当的大小和大小缩放函数非常关键。当使用素数时大小最好,当使用两人一组。