Listing 3: Example of using ManyMany class with and without link attribute
#include <string> #include "Relations.h" #include <iostream> using namespace std; //Link attribute structure //Uniquely identifies a student-class link struct Record{ Record(const string& grade = string(), int absenses = 0) : Grade(grade), Absenses(absenses){} string Grade; int Absenses; }; main(){ /* There is a many-to-many relationship between students and classes: a student might be in many classes and a class might have many students */ //Many-To-Many relationship with a link attribute typedef ManyMany <string, long, less<string>, less<long>, Record> School_Rel; School_Rel school; Record r1("A", 1); school.insert("Peter", 101, r1); Record r2("B", 2); school.insert("Peter", 102, r2); Record r3("C", 3); school.insert("Peter", 103, r3); Record r4("A", 1); school.insert("Jane", 101, r4); Record r5("B", 1); school.insert("Jane", 103, r5); Record r6("A", 4); school.insert("Jane", 104, r6); cout << "Listing Peter's classes:" << endl; for(School_Rel::iterator2 it = school.begin("Peter"), end = school.end("Peter"); it != end; ++it) cout << *it << endl; cout << endl; cout << "Listing students in 103: " << endl; for(School_Rel::iterator1 it = school.begin(103), end = school.end(103); it != end; ++it) cout << *it << endl; cout << endl; const Record* r = school.getAttribute("Peter", 103); if(r){ cout << "Peter's Grade and absenses for 103:" << endl; cout << "Grade - " << r->Grade << " Absenses - " << r->Absenses << endl; } //////////////////////////////////////////////////////////// ////Many-To-Many relationship without a link attribute ManyMany <string, long> school1; school1.insert("Peter", 101); school1.insert("Peter", 102); school1.insert("Peter", 103); school1.insert("Jane", 101); school1.insert("Jane", 103); school1.insert("Jane", 104); cout << "Listing Jane's classes:" << endl; for(ManyMany <string, long> ::iterator2 it = school1.begin("Jane"), end = school1.end("Jane"); it != end; ++it) cout << *it << endl; cout << endl; cout << "Listing students in 101: " << endl; for(ManyMany <string, long>::iterator1 it = school1.begin(101), end = school1.end(101); it != end; ++it) cout << *it << endl; } /* Output: Listing Peter's classes: 101 102 103 Listing students in 103: Peter Jane Peter's Grade and absenses for 103: Grade - C Absenses - 3 Listing Jane's classes: 101 103 104 Listing students in 101: Peter Jane */ End of Listing