C++ 我如何以更面向对象的方式表示这一点?
大多数情况下,我只是对最后一行的概念感到困惑。我知道我可以将结构更改为类,这会很好,但最后一行已经开始了。它基本上是说哈希表是一个桶数组。这段代码是否足够好,或者是否有一种方法可以在哈希表类中表示这段代码C++ 我如何以更面向对象的方式表示这一点?,c++,oop,hashtable,C++,Oop,Hashtable,大多数情况下,我只是对最后一行的概念感到困惑。我知道我可以将结构更改为类,这会很好,但最后一行已经开始了。它基本上是说哈希表是一个桶数组。这段代码是否足够好,或者是否有一种方法可以在哈希表类中表示这段代码 typedef char STR10[10+1]; typedef char STR20[20+1]; typdef struct Slot { STR10 key; STR10 value; }; const int MAX_SLOTS = 3; const int MA
typedef char STR10[10+1];
typedef char STR20[20+1];
typdef struct Slot
{
STR10 key;
STR10 value;
};
const int MAX_SLOTS = 3;
const int MAX_BUCKETS = 30;
typedef struct Bucket
{
short int count;
short int overflow;
Slot slots[MAX_SLOTS];
};
typedef Bucket HashTable[MAX_BUCKETS];
这代表同样的想法吗?我真的很难开始这项工作。如果可以,我可以将char数组替换为,Slot数组替换为,将define替换为enum:
class HashTable
{
private:
Bucket table[MAX_BUCKETS];
}
enum SlotSize
{
MaxSlots=3
};
枚举BucketSize
{
MaxBucket=30
};
结构槽
{
std::字符串键;
std::字符串值;
};
结构桶
{
整数计数;
int溢出;
向量时隙;
};
类哈希表
{
私人:
std::向量表;
}
通常情况下,您需要一个动态数量的存储桶,固定大小只对非常特定数量的条目有用。@AndrewDunn:通常是这样,但更令人担忧的是每个存储桶的插槽数量是固定的。尊敬的用户2023585:一个更好的替代方法是置换列表,在这里,您可以运行一系列从散列到桶的偏移量(%必要时返回到实际桶中),直到找到一个可用的偏移量为止。您可以硬编码位移(但仍有失败的风险)或使用某些函数生成一系列。您希望最大限度地减少现有连续偏移量之和等于另一个偏移量的情况:如果这令人困惑,可以从素数开始……基本上只使用std::map
,或者更好地使用std::unordered_map
(如果C++11是一个选项)。否则这有家庭作业的味道。是的,这是家庭作业,你一定很有味道。啊,是的,完全忘了它们。我还没有用C++编码6个月,主要是用脚本语言……是的,用C++字符串和STL容器来实现生命简化,所以类声明基本上和我原来的文章TyPulf中的TyPulf相同的概念是C方式,C++不需要它用于普通类声明BLZ:+1,而是一个小的小提示——所有大写标识符都会与预处理器宏冲突。
enum SlotSize
{
MaxSlots = 3
};
enum BucketSize
{
MaxBuckets = 30
};
struct Slot
{
std::string key;
std::string value;
};
struct Bucket
{
int count;
int overflow;
std::vector<Slot> slots;
};
class HashTable
{
private:
std::vector<Bucket> table;
}