Hi, I would like to get some help with this program I am trying to implement a student grading system. -Use an Associative container, multimap. -Search record by Student name (the key) and the data consists of student ID and GPA. Since more than one student can have the same name, use multimap. progam does the following: 1. It will use a multimap as the container. 2. It will use the Student class to describe the ID and GPA. multimap will be declared: multimap<string, Student> grades; 3. use data(names, IDs and GPAs) 4. The main() driver will display a menu of commands available to the user: The commands are: a. insert a student’s data into the system, The program will allow duplicate names to be inserted. b. Find a student’s data, given the student’s name(key). If there are multiple students in the container with the given name, display information about all of them. c.. Exit the system d. it should have files (.h and .cpp)
I need help to implement this program using "Multimap", my code bellow is using "map", i want to convert it into MultiMap. thanks Code: #include <iostream> #include <string> #include <map> using namespace std; class Student { public: //--- Constructor Student (int id = 0, double gpa = 0); //--- Output operator friend ostream & operator<<(ostream & out, const Student & s); //--- Input operator friend istream & operator>>(istream & in, Student & s); //--- Less-than operator friend bool operator<(const Student & a, const Student & b); private: //--- Data members int myId; double myGPA; }; // end of class Student //--- Definition of constructor inline Student::Student(int id, double gpa) : myId(id), myGPA(gpa) { } //--- Definition of input operator inline istream & operator>>(istream & in, Student & s) { in >> s.myId >> s.myGPA; return in; } //--- Definition of output operator inline ostream & operator<<(ostream & out, const Student & s) { out << "id = " << s.myId << " GPA = " << s.myGPA; return out; } //--- Definition of less-than operator inline bool operator<(const Student & a, const Student & b) { return a.myId < b.myId; } //================================================================== int main() { typedef map<string, Student, less<string> > map1; typedef map<Student, string, less<Student> > map2; map1 a1; // associative array of Student, index type is string map2 a2; // associative array of string, index type is Student Student s; s = Student(12345, 3.3); a1["Fred"] = s; a2[s] = "Fred"; s = Student(32322, 3.9); a1["Al"] = s; a2[s] = "Al"; s = Student(13131, 2.5); a1["Joan"] = s; a2[s] = "Joan"; s = Student(22121, 4.0); a1["Barb"] = s; a2[s] = "Barb"; s = Student(28888, 2.9); a1["George"] = s; a2[s] = "George"; s = Student(19981, 3.0); a1["Dot"] = s; a2[s] = "Dot"; s = Student(20012, 2.9); a1["Sue"] = s; a2[s] = "Sue"; string name; cout << "Enter a name: "; cin >> name; map1::iterator it1 = a1.find(name); cout << name << " has "; if (it1 == a1.end()) cout << "no info"; else cout << a1[name]; cout << endl; Student aStudent; cout << "Enter a Student's id and GPA: "; cin >> aStudent; map2::iterator it2 = a2.find(aStudent); cout << "Student " << aStudent << " is "; if (it2 == a2.end()) cout << "no info"; else cout << a2[aStudent]; cout << endl; }