假设我的哈希表有不同大小的单词,我想在单独的哈希表中跟踪不同大小的单词。不是为 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];
}
}
最佳答案
允许整体模板参数:
template <int Size>
class HashTable ...
(我通常更喜欢 size_t Size
,但您需要包含一个定义它的 header ,例如 <cstddef>
)。
另外,Captain Obvlious 有一个很好的观点,即大多数考虑进行此类优化的人实际上并没有需要它们,而只是陷入了概念上的担忧。如果您确实有经证实的需求,关于...
Dynamic allocation is not an option, because it would cost 8 additional bytes for the pointer variable for each table entry.
...还有其他选项,如果您不需要删除元素,则特别容易实现。例如,您可以将文本存储在连续的内存区域中,如...
this\0that\0whatever\0huh\0
...然后将偏移量存储到单个哈希表中的该区域中。如果您知道输入数据不会超过 64k,那么每个偏移量只需要 2 个字节。 4 个字节将允许最多 4GB 的字符串数据。对于更长的单词,您为未使用/空哈希表桶浪费的空间更少,因此它抵消了将文本存储在其他地方的作用。
关于c++ - 向类提供 const 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42520414/