【发布时间】:2013-01-30 00:24:47
【问题描述】:
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];
大多数情况下,我只是对最后一行的概念感到困惑。我知道我可以将结构更改为类,这会很好,但最后一行对我来说很重要。它基本上是说 HashTable 是一个桶数组。该代码是否足够好,还是有办法在 HashTable 类中表示它?
class HashTable
{
private:
Bucket table[MAX_BUCKETS];
}
这代表相同的想法吗?我真的很难开始这样做。
【问题讨论】:
-
一般情况下,您会使用动态数量的桶,固定大小仅对非常特定数量的条目有用。
-
@AndrewDunn:一般来说是这样,但更令人担忧的是每个桶的固定槽数。尊敬的用户 2023585:一个更好的替代方案是置换列表,您可以在其中运行一系列从散列到存储桶的偏移量(必要时返回到实际存储桶),直到找到可用的存储桶。您可以对位移进行硬编码(但仍有失败的风险)或使用某些函数来生成一系列。您希望最小化现有连续偏移量之和等于另一个偏移量的情况:如果这令人困惑,也许只是从素数开始......
-
基本上只使用
std::map甚至更好,std::unordered_map(如果 C++11 是一个选项)。否则这就像家庭作业的味道。 -
是的,这是功课,你一定很香。