2017-02-28 4 views
0

Angenommen, meine Hash-Tabelle hat Wörter unterschiedlicher Größe und ich möchte Wörter verschiedener Größen in separaten Hash-Tabellen nachverfolgen. Anstatt 20 verschiedene Hash-Tabellendateien für 20 verschiedene Wörtergrößen zu erstellen, gibt es eine Möglichkeit, eine const über eine Klasse zu liefern?Eine const-Variable an eine Klasse übergeben

Die dynamische Zuweisung ist keine Option, da die Zeigervariable für jeden Tabelleneintrag 8 zusätzliche Byte kosten würde.

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

Spells wie vorzeitige Optimierung –

Antwort

2

Integral Vorlage Argumente sind erlaubt:

template <int Size> 
class HashTable ... 

(I in der Regel size_t Size bevorzugen würden, aber Sie müssen einen Header enthalten haben, die es, wie <cstddef> definiert).


Getrennt, Kapitän Obvlious hat einen guten Punkt, dass die meisten Menschen solche Optimierungen unter Berücksichtigung tatsächlich haben keine Notwendigkeit, dass sie bekommen, und sind nur in einer konzeptionellen Sorge gefangen. Wenn Sie eine nachgewiesene Notwendigkeit haben, in Bezug auf ...

Dynamische Zuordnung ist keine Option, da es 8 zusätzliche Bytes für die Zeigervariable für jeden Tabelleneintrag kosten würde.

... es gibt andere Optionen, die besonders einfach implementiert werden können, wenn Sie Elemente nicht löschen müssen. Zum Beispiel könnten Sie den Text in einem zusammenhängenden Speicherbereich speichern, wie in ...

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

... dann speichern Offsets in diese Region in einer einzigen Hash-Tabelle. Wenn Sie wüssten, dass die Eingabedaten 64k nicht überschreiten, benötigen Sie nur 2 Byte pro Offset. 4 Bytes würden bis zu 4 GB String-Daten erlauben. Und für längere Wörter verschwenden Sie dann weniger Platz für unbenutzte/leere Hash-Tabellen-Buckets, so dass es ausgleicht, wenn der Text an anderer Stelle gespeichert wird.

Verwandte Themen