Karte wie Struktur in C: mit int und struct zu bestimmen, ein Wert
Ich verwendet, um code in C++ und nun versuche ich ein Programm in C.
Angenommen ich habe eine struct
struct point{
int x;
int y;
}
Gibt es eine Daten-Struktur A
im c
unterstützen können die folgende Funktionalität:
Gegeben seien zwei ganze zahlen, sagen i
und j
, und zwei Punkte, sagen p1
und p2
.
A[i][j][p1][p2]
können eindeutig bestimmen einen Wert.
Es klingt wie ein 4-d-array. Aber die Indizes sind nicht mehr int, aber benutzerdefinierte struct
.
- Warum nicht erstellen Sie einfach eine Hash-Funktion für Ihre Punkte und verwenden, die als ein index?
- Es gibt keine Phantasie-Daten-Struktur in C. Sie haben das Rad neu zu erfinden für sich selbst, oder gehen Sie zurück zu C++ !
- Es gibt nichts wie dies in C. kann Man nicht definieren, die Operatoren in C. Die nächste Sache, die Sie haben können, ist eine benutzerdefinierte hash-Funktion, die Sie verwenden, um den index in ein array oder etwas ähnliches. Der Punkt ist: Sie sind ziemlich viel gebunden built-in-Typen und erfinden alles selbst.
- Es sieht aus wie ein sechs-dimensionales array der sortiert...
- Wie schon andere gesagt haben: Entweder gehen Sie auf der Suche nach "Hash-code in C", oder suchen Sie die Grundlagen von hashtables und die Implementierung einer de-novo -. Es ist gar nicht so schwer; ich habe realisiert Sie mehrere Male. Der wesentliche Unterschied zu aus der Benutzer-Sicht wird sein, dass, anstatt zu sagen
myHashTable.put(key,value)
werden Sie brauchen, um zu sagenputToHashTable(myHashTable,key,value)
und so weiter. (Es sei denn, Sie wollen wirklich neu erfinden OO und beginnen mit dem Aufbau der Methode dispatch in Ihre Objekte-das ist möglich, aber übertrieben für diesen einfachen Fall.)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Werden Sie wahrscheinlich haben, um Ihre eigene Struktur. Die Programmiersprache C von Kernighan und Ritchie hat ein Beispiel der Herstellung einer assoziierten Karte im c, und was werde ich unten näher beschrieben wird, basiert auf dem, was ich erinnere mich, dass.
Grundsätzlich müssen Sie eine Struktur, die Karte enthält struct Schlüssel und struct Wert.
struct Schlüssel Elemente enthält, bestimmen Sie den Wert (in deinem Fall 2 Punkte und 2 ints)
struct Wert ist, was Sie wollen Ihr Schlüssel zu zeigen (Sie nicht sagen)
Haben Sie nun ein struct Karte, dass die Mitarbeiter Ihre vier Eingängen mit einem Wert, sondern eine einzelne Karte, ist das nicht hilfreich. Sie gehen zu wollen, eine ganze Reihe von Ihnen.
Wenn Sie nicht wollen, zu Linear durchsuchen Sie das array für die Karte struct Sie suchen, Sie können eine Hash-Funktion, die bringt Sie direkt zu ihm. Einfach eine Funktion definieren, die den Schlüssel und verwendet seinen Wert zuweisen es einen index im array. Verwenden Sie den hash-Platz in der Karte in das array und rufen es aus dem array. (Hinweis: ich bin mir nicht sicher, ob dies ist das richtige Beispiel für hashing, bitte korrigieren, wenn das ist völlig falsch)
Wenn Sie die Hash-Funktion, die Sie haben zu prüfen, Kollisionen (was passiert, wenn zwei Schlüssel das gleiche Ergebnis für get_hash). Wenn Sie Ihr array von Karten, die Sie müssen irgendeine form der kollisionsauflösung.