Ordnen Sie die Struktur in C zu: Verwenden Sie int und struct, um einen Wert zu bestimmen

8

Ich habe in C ++ programmiert und jetzt versuche ich in C zu programmieren.

Angenommen, ich habe eine Struktur definiert

%Vor%

Gibt es eine Datenstruktur A in c , die die folgende Funktionalität unterstützen kann: Bei zwei ganzen Zahlen sagen wir i und j , und zwei Punkte, sagen wir p1 und p2 . A[i][j][p1][p2] kann einen Wert eindeutig bestimmen.

Es klingt wie ein 4-D-Array. Indizes sind jedoch nicht mehr ein int, sondern ein benutzerdefiniertes struct .

Kommentare und Vorschläge sind willkommen.

    
user3341338 22.02.2014, 18:06
quelle

1 Antwort

13

Sie müssen wahrscheinlich Ihre eigene Struktur erstellen. Die Programmiersprache C von Kernighan und Ritchie hat ein Beispiel dafür, wie man eine Assoziationskarte in c erstellt, und was ich im Folgenden detailliert darstelle, basiert auf dem, woran ich mich erinnere.

Im Grunde benötigen Sie eine Struktur Zuordnung , die die Struktur Schlüssel und die Struktur Wert enthält.

%Vor%

struct Schlüssel enthält Elemente, die den Wert bestimmen (in Ihrem Fall 2 Punkte und 2 Zeilen)

%Vor%

struct Wert ist, was immer Ihr Schlüssel zeigen soll (Sie haben nicht gesagt)

Sie haben jetzt eine struct Map , die Ihre vier Eingaben mit einem Wert verknüpft, aber eine einzelne Map ist nicht so nützlich. Sie werden eine ganze Reihe von ihnen wollen.

%Vor%

Wenn Sie das Array nicht linear nach der Map -Struktur durchsuchen möchten, die Sie suchen, können Sie eine Hash-Funktion erstellen, die Sie direkt dorthin bringt. Definieren Sie einfach eine Funktion, die den Schlüssel übernimmt und verwendet seinen Wert, um ihm einen Index im Array zuzuordnen. Verwenden Sie den Hash, um die Map im Array zu platzieren und aus dem Array abzurufen. (Hinweis: Ich bin mir nicht sicher, ob dies ein korrektes Beispiel für Hashing ist, bitte korrigieren Sie, wenn das völlig falsch ist)

%Vor%

Wenn Sie die Hashfunktion verwenden, müssen Sie Kollisionen berücksichtigen (was passiert, wenn zwei Schlüssel das gleiche Ergebnis für get_hash ergeben). Wenn Sie Ihr Karten-Array verwenden, benötigen Sie eine Art Kollisionsauflösung.

    
gslavin 22.02.2014, 18:47
quelle

Tags und Links