假设我的哈希表有不同大小的单词,我想在不同的哈希表中跟踪不同大小的单词。而不是为20个不同的单词大小创建20个不同的哈希表文件,有没有办法通过类提供const?
动态分配不是一个选项,因为每个表项的指针变量将花费8个额外的字节。
template <//Is there a way to supply a const here to change the value of size?>
class HashTable
{
static const int size = #;
struct TableEntry
{
char words[size];
}
}
答案 0 :(得分:2)
允许使用积分模板参数:
template <int Size>
class HashTable ...
(我通常更喜欢size_t Size
,但你需要包含一个定义它的标题,例如<cstddef>
)。
另外,Obvlious船长有一个很好的观点,即考虑这种优化的大多数人实际上并没有对它们有所需要,而且只是陷入了一个概念上的担忧。如果你确实有需要,关于......
动态分配不是一个选项,因为每个表项的指针变量将花费8个额外的字节。
...还有其他选项,如果您不需要擦除元素,则特别容易实现。例如,您可以将文本存储在连续的内存区域中,如...
this\0that\0whatever\0huh\0
...然后将偏移存储到单个哈希表中的该区域。如果您知道输入数据不会超过64k,那么每个偏移量只需要2个字节。 4个字节允许最多4GB的字符串数据。对于更长的单词,您将浪费更少的空间用于未使用/空的哈希表桶,以便在文本存储在其他地方时进行平衡。