Listing 2: Example of using OneMany class

#include "Relations.h"
#include <string>

using namespace std;

//function prototypes
void listChildren(const OneMany<string, string>& MotherChildren, 
                  const string& Mother);
void insertChild(OneMany<string, string>& MotherChildren, 
                 const string& Mother, const string& Child);

void main(){

   // declare the relationship
   // each mother might have many children but each child indeed 
   // has only one mother
   OneMany<string, string> MotherChildren;

   string firstMother("Jane");
   string secondMother("Ann");
   string child;

   child = "Paul";
   insertChild(MotherChildren, firstMother, child);

   child = "Paul";
   // will fail because Paul is already in the relationship
   insertChild(MotherChildren, firstMother, child);

   child = "Richard";
   insertChild(MotherChildren, firstMother, child);

   child = "Ann";
   insertChild(MotherChildren, firstMother, child);

   child = "Alex";
   insertChild(MotherChildren, firstMother, child);

   /////////////////////////////////////////////

   child = "Cathy";
   insertChild(MotherChildren, secondMother, child);

   //will fail because Richard is Jane's son
   child = "Richard";
   insertChild(MotherChildren, secondMother, child);

   child = "Peter";
   insertChild(MotherChildren, secondMother, child);

   child = "Mary";
   insertChild(MotherChildren, secondMother, child);

   cout << "Listing Jane's children:" << endl;
   listChildren(MotherChildren, firstMother);
   cout << endl;

   cout << "Listing Ann's children:" << endl;
   listChildren(MotherChildren, secondMother);

   cout << endl;

   string* pMother = MotherChildren.getOne("Ann");
   if(NULL != pMother)
    cout << "Ann's mother is " << *pMother << endl;

}

void listChildren(const OneMany<string, string>& MotherChildren, 
   const string& Mother){

   //Iterate through all children
   for(OneMany<string, string>::const_iterator it = 
          MotherChildren.begin(Mother), 
          end = MotherChildren.end(Mother); it != end; ++it)
      cout << *it << endl;
}

void insertChild(OneMany<string, string>& MotherChildren, 
                 const string& Mother, const string& Child){

if(!MotherChildren.insert(Mother, Child))
   cout << ">>>Can't insert " << Child << " into relationship " 
        << Mother << "-" << Child <<  endl;
}

/*
Output:

>>>Can't insert Paul into relationship Jane-Paul
>>>Can't insert Richard into relationship Ann-Richard
Listing Jane's children:
Paul
Richard
Ann
Alex

Listing Ann's children:
Cathy
Peter
Mary
Ann's mother is Jane

*/
— End of Listing —