2016-03-20 15 views
0

Ich hatte das Missfallen, mit einem Lehrbuch gesattelt zu werden, das nicht sehr gut geschrieben ist. Wie es aussieht, ging ich von C++ zu körperlich krank nur darüber nachzudenken. Ich weigere mich jedoch, die Klasse zu verlassen. Also die lange und kurze davon ist, ich habe ein Labor, das folgende fragt:C++ über Multisets und Arrays

Schreiben Sie ein Programm, das zwei Arrays namens Akteure und Rollen, jeweils der Größe N enthält. Für jedes i, Schauspieler [i] ist die Name eines Akteurs und Rollen [i] ist eine Multimenge von Strings, die die Namen der Filme enthält, in denen der Schauspieler aufgetreten ist. Das Programm liest die Ausgangsinformationen für diese Arrays aus Dateien in einem von Ihnen entworfenen Format. Sobald das Programm ausgeführt wird, kann der Benutzer den Namen eines Schauspielers eingeben und eine Liste aller Filme für diesen Schauspieler erhalten. Oder der Benutzer kann den Namen eines Films eingeben und eine Liste aller Schauspieler in diesem Film erhalten.

Jetzt möchte ich die Antwort nicht. Ich muss nur wissen, in welche Richtung ich gehen soll. Ich fühle mich ziemlich wohl mit Standard-Arrays, aber die Art, wie Multisets in diesem Lehrbuch beschrieben werden, verwirrt mich zu keinem Ende. Jede Hilfe (ohne mir nur die Antwort zu geben) wäre willkommen.

+0

In der Datenbank-Theorie würde dies eine viel zu viele Mapping nennen, wenn das hilft. –

+0

find-Methode findet ein bestimmtes Mitglied, count-Methode zählt Elemente mit einem bestimmten Schlüssel. –

+0

Ein Multiset (zumindest in der C++ - Standardbibliothek, aber ich denke bei normaler Verwendung) ist eine Menge, die wiederholte Elemente haben kann. C++ - (Multi-) Mengen sind keine echten mathematischen Mengen, weil sie geordnet sind; Seit C++ 11 enthält die Standardbibliothek auch ungeordnete_Sätze und ungeordnete_Multisets. Die Idee einer Multimenge mag seltsam erscheinen, aber es ist nützlich, sich daran zu erinnern, dass C++ - (Multi-) Mengen eine beliebige Funktion verwenden können, um Objekte zu vergleichen, die eine Äquivalenzbeziehung definieren. Ich sehe immer noch nicht, warum 'roles [i]' eher ein Multiset als ein Set wäre (kann ein Schauspieler zweimal im selben Film vorkommen?) – rici

Antwort

0

Die Art, wie es gemacht wird, ist ein drittes Hilfs-Multiset, das Schauspieler mit Filmen verbindet.

Dieser dritte Satz muss nur Paare eindeutiger Ganzzahlen enthalten. Nehmen wir an, der Benutzer wählt 'Wayne' aus. Der erste Schritt besteht darin, eine Hilfsuntermenge von Ganzzahlpaaren (actor_id, movie_id) zu bilden, jeder Akteur hat eine eindeutige Ganzzahl-ID, jeder Film hat eine eindeutige Ganzzahl-ID und iteriert dann alle Filme Werte zu diesen Schlüsseln.

Gehen Sie den anderen Weg: Wenn Benutzer Film 'Rohleder' wieder Form Teilmenge von ganzen Zahlen und iterieren durch diese, um alle Akteure als Werte für diese Schlüssel zu finden.

Weitere Informationen finden Sie unter "Viele zu viele Beziehungen".

+0

Dies kann helfen, indem man Tabellen durch Sets ersetzt: ** http: // docs .oracle.com/cd/E23507_01/Plattform.20073/RepositoryGuide/html/s0608manytomanyrelationships01.html ** –