speichert bekannte Schlüssel / Wert-Paare in c

7

Ich lerne gerade c. Ich schreibe einen Webserver als Übung.
Jetzt muss ich die Statuscodes und Grundphrasen speichern.

Wie speichern Sie diese Schlüssel / Wert-Paare am besten?

Meine erste Wette war eine hashmap. Aber es gibt keine native Implementierung in c. Also müsste ich eine Bibliothek benutzen.

    
Shylux 06.02.2013, 14:53
quelle

4 Antworten

6

Wie andere Antworten würde ich auch empfehlen, nur ein Array von Strings als Nachschlagetabelle zu verwenden. Wenn Sie annehmen, dass alle Statuscodes eindeutig sind, ist ein Array von Strings bei weitem die einfachste Implementierung für einen kleineren Datensatz.

Sobald Sie beginnen, größere Datenmengen zu speichern, beginnen Hashmaps nützlich zu werden. Ein Lookup-Array ist hier die Lösung, aber wie Sie sagten, Sie lernen C, können Sie tatsächlich eine Hashtabelle in nativem C implementieren, indem Sie dynamischen Speicher verwenden (ein kritisches Konzept für C.). Diese Website erklärt, wie Sie eine Hashtabelle erstellen C sehr gut.

Ссылка

    
Urchin 06.02.2013, 16:41
quelle
5

Ich würde ein sortiertes Array verwenden.

Sie können das Array in beliebiger Reihenfolge definieren und es zur Laufzeit (einmal) mit dem qsort() Funktion. Dann können Sie Binärsuchen mit bsearch() durchführen. Die Gesamtzahl der Antwortcodes ist gering, eine binäre Suche ist sehr schnell.

Dies hat den Vorteil, keinen externen Code für etwas Einfaches wie dieses zu benötigen.

    
unwind 06.02.2013 14:55
quelle
5

Hier ist eine alternative Idee, die den Vorteil der Geschwindigkeit hat, während sie etwas Speicheraufwand hat.

Im Grunde die einfachste Form der Hash-Tabelle, wobei die Hash-Funktion die Identität (Code - & gt; -Code) ist, auch bekannt als Nachschlagetabelle.

Wenn Sie wissen, dass die HTTP-Statuscodes auf 5xx beschränkt sind, können Sie davon ausgehen, dass 599 die höchste erforderliche Zahl ist. Daher erstellen Sie eine Tabelle mit 600 Elementen.

Diese Tabelle kann so gemacht werden:

%Vor%

Die Initialisierung ist ziemlich einfach:

%Vor%

Das Nachschlagen einer Nachricht ist ebenfalls einfach:

%Vor%

Dieses Array ist 2400 Byte groß (4800 auf 64-Bit-Plattformen), aber die Zugriffszeit ist garantiert O (1).

    
SirDarius 06.02.2013 15:34
quelle
3

Vielleicht können Sie eine Struktur mit dem K \ V darin erstellen.

Wie so:

%Vor%     
Tony The Lion 06.02.2013 14:55
quelle

Tags und Links