N:M Container
-
Hi,
ich brauche einen Container, mit dem ich auf eine einfach Art und Weise N:M-Relationen abbilden kann, gemäß dem klassischen Fall Schüler:Kurse.
Ich kenne eine mögliche Implementation so:class Pupil { void addToCourse( Course c ) { if ( ! courses.contains( c ) ) courses.push_back( c ) c.addPupil( this ) } void remFromCourse( Course c ) { if ( courses.contains( c ) ) courses.erase( c ) c.remPupil( this ) } Course[] courses } class Course { void addPupil( Pupil p ) { if ( ! pupils.contains( p ) ) pupils.push_back( p ) p.addToCourse( this ) } void remPupil( Pupil p ) ... Pupil[] pupils }
Den Code zur gegenseitigen "Synchronisation" würde ich gerne aus den eigentlichen Klassen raushalten, deshalb suche ich eine vorgefertigte, abstrahierende Lösung. Weiß da jemand was?
-
Es gab bei Sourceforge mal ne C++-Klasse aufgebaut wie ne (multi-)map mit dem netten kleinen Feature dass man auch das Mapping in die entgegengesetzte Richtung machen kann. Habs aber auf die Schnelle nicht gefunden.
-
Boost::BiMap?
http://www.boost.org/doc/libs/1_38_0/libs/bimap/doc/html/index.htmlSimon
-
boost::bimap sieht gut aus, dann hör ich erstmal auf, bei Sourceforge zu suchen Leider gibt's bei boost mittlerweile so viel, dass ich da keinen richtigen Überblick mehr hab.. Danke euch!
-
Badestrand schrieb:
boost::bimap sieht gut aus, dann hör ich erstmal auf, bei Sourceforge zu suchen
Boost.MultiIndex wäre womöglich auch noch was, falls es ein wenig komplexer sein soll. Boost.Bimap baut auf Boost.MultiIndex auf, soweit ich das weiss
Badestrand schrieb:
Leider gibt's bei boost mittlerweile so viel, dass ich da keinen richtigen Überblick mehr hab..
Hier hat man eine gute Übersicht:
http://www.boost.org/libs/libraries.htmEs lohnt sich immer mal kurz drüber zu fliegen
Der Link leitet übrigens immer zur aktuellen Bibliothek weiter.Grüssli