speichern von Schlüssel/Wert-Paare in c
Ich bin derzeit lernen c. Ich Schreibe ein web-server als eine übung.
Jetzt habe ich zum speichern der status-codes und Grund Sätze.
Was ist der beste Weg, um diese Schlüssel/Wert-Paaren?
Meine erste Wette war eine hashmap. Aber es gibt keine native Implementierung in c. Also ich würde die Verwendung einer Bibliothek.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie andere Antworten, ich würde auch empfehlen, nur mit einem array von Zeichenfolgen als lookup-Tabelle. Wenn Sie davon ausgehen, alle status-codes sind einzigartig, ein array von strings ist bei weitem die einfachste Implementierung für eine kleinere Gruppe von Daten.
Sobald Sie beginnen, die Speicherung von größeren Datenmengen, die bei hashmaps starten immer nützlich. Ein lookup-array ist hier die Lösung, aber wie Sie sagten, Sie sind das lernen C, können Sie tatsächlich implementieren Sie eine Hashtabelle, in der systemeigenes C durch die Verwendung von dynamischen Speicher (eine kritische Konzept zu lernen, C.) Diese website wird erläutert, wie eine hashtable in C sehr gut.
http://www.sparknotes.com/cs/searching/hashtables/section3.rhtml
Hier ist eine alternative Idee, die hat den Vorteil der Geschwindigkeit, während einige Speicher-overhead.
Im Grunde die einfachste form der hash-Tabelle, in der die hash-Funktion ist die Identität (code> code), auch bekannt als lookup-Tabelle.
Tun, zu wissen, dass HTTP-status-codes sind beschränkt auf 5xx, können Sie davon ausgehen, 599, werden die höchsten, die Sie brauchen, deshalb werden Sie erstellen Sie eine Tabelle mit 600 Elementen.
Diese Tabelle kann wie folgt vorgenommen:
Initialisierung ist ziemlich einfach:
Suchen, bis eine Meldung ist auch tot-einfach:
Diesem array 2400 bytes groß (4800 auf 64-bit-Plattformen), aber die Zugriffszeit ist garantiert O(1).
Ich würde ein sortiertes array.
Definieren Sie das array in beliebiger Reihenfolge, und Sortieren Sie es auf run-time (einmal) mit der
qsort()
Funktion. Dann kann man die binäre Suche mitbsearch()
. Die Gesamtzahl der response-codes ist klein, binärer Suche sehr schnell sein wird.Dies hat den Vorteil, dass Sie nicht das Bedürfnis einen externen code, für etwas einfaches wie diese.
Vielleicht können Sie erstellen Sie ein struct mit den K\V in es.
Etwa so: