2017-02-28 39 views
0

假设我的哈希表包含不同大小的单词,并且我想跟踪单独哈希表中不同大小的单词。除了为20个不同的字长创建20个不同的哈希表文件外,有没有办法通过一个类来提供一个const?向一个类提供一个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]; 
    } 

} 
+1

像过早优化 –

回答

2

积分模板参数被允许:

template <int Size> 
class HashTable ... 

(我通常宁愿size_t Size,但你需要有包含的头定义它,如<cstddef>)。


另外,Obvlious船长有一个好点的,大多数人在考虑这样的优化还没有真正得到需要他们,只是陷入了一个概念上的问题。如果您确实有需要,请参阅...

动态分配不是一个选项,因为它会为每个表项的指针变量花费8个附加字节。

......还有其他的选择,如果你不需要擦除元素,特别容易实现。例如,你可以在一个连续的内存区域中的文本存储为...

this\0that\0whatever\0huh\0 

...然后存储偏移到该区域在一个哈希表。如果您知道输入数据不会超过64k,则每个偏移只需要2个字节。 4个字节将允许最多4GB的字符串数据。而对于更长的单词,则会浪费较少的空间用于未使用/空的散列表桶,以便在其他位置存储文本时进行平衡。

相关问题