- Get link
- X
- Other Apps
Featured Post
Posted by
Unknown
on
- Get link
- X
- Other Apps
This is a simple implementation of usage of maps in C++ . Here I have used a simple map containing an int as the key and string as the value . This can further be extended to any data type needed by the use of templates.
Maps are like arrays used to store a pair of values together , each value identified by a key. So it becomes easier to search the values in a Map. One big advantage of maps is that they extend as we use them. Here the duplicate keys are not allowed , which means at a particular key value only one data would be stored. The new data is the one which stays in that particular key value , old one is overwritten .
We can use MultiMap if we need duplicates to be stored.
Maps are like arrays used to store a pair of values together , each value identified by a key. So it becomes easier to search the values in a Map. One big advantage of maps is that they extend as we use them. Here the duplicate keys are not allowed , which means at a particular key value only one data would be stored. The new data is the one which stays in that particular key value , old one is overwritten .
We can use MultiMap if we need duplicates to be stored.
#include <iostream> #include <string> #include <map> #include <limits> #define BAD_INPUT_CUTOFF 3 using namespace std; class MapDemo { private : map<int, string> mymap; public: MapDemo(); ~MapDemo(); void insert_element(); void delete_element(); bool find(int); bool isEmpty(); int mapsize(); void display(); void revdisplay(); void clear(); }; unsigned int getInt(const char *prompt) { int input, //used to get input bad_count=0; //used to keep track of how many bad attempts. do { std::cout << prompt; std::cin >> input; if (!std::cin.good()) { std::cout << "\nInvalid Input! : Enter a number only..." << std::endl; std::cin.clear(); //clear the buffer std::cin.ignore(std::numeric_limits<std::streamsize>::max(),'\n'); bad_count++; //User made a bad input, count it input = 0; // user did not enter a valid number } } while (input == 0 && bad_count < BAD_INPUT_CUTOFF); return input; } MapDemo :: MapDemo() { cout<<"New Map created..."<<endl; } MapDemo :: ~MapDemo() { cout<<"Map destroyed..."<<endl; } void MapDemo :: insert_element() { int key; string value; key = getInt("\nEnter Key : "); if(find(key)) cout<<"Warning : Duplicate Key!!!"<<endl; cout<<"\nEnter Value : "; cin>>value; mymap.insert(pair<int,string>(key, value)); } void MapDemo :: delete_element() { int key; if(!isEmpty()) { key = getInt("\nEnter Key of the value to be deleted: "); if(find(key)) mymap.erase(key); else cout<<"Key not Found !!! "; } } bool MapDemo :: find(int key) { if(!mymap.empty()) { if(mymap.find(key)->first != key ) { return false; } else return true; } return false; } bool MapDemo :: isEmpty() { if(mymap.empty()) { cout<<"Map is empty ! ! !"<<endl; return true; } else return false; } int MapDemo :: mapsize() { return mymap.size(); } void MapDemo :: display() { map <int, string>::iterator itr; for(itr = mymap.begin(); itr != mymap.end(); itr++) { cout << (*itr).first <<" = "<<(*itr).second<<endl; } } void MapDemo :: revdisplay() { map <int, string>::reverse_iterator ritr; cout << "Displaying in reverse.. "<<endl; for(ritr = mymap.rbegin(); ritr != mymap.rend(); ritr++) { cout << ritr->first <<" = "<<ritr->second<<endl; } } void MapDemo :: clear() { mymap.clear(); } int main() { MapDemo m1, m2; m1.insert_element(); m1.insert_element(); m1.insert_element(); m1.delete_element(); m1.display(); m1.revdisplay(); m2.insert_element(); m2.insert_element(); m2.insert_element(); m2.display(); m2.clear(); m2.delete_element(); } Suggestions are Welcome... ;)
Comments
Its map usage code as a member variable. Please understand the statement " This is a simple implementation of maps in C++ " properly
ReplyDeleteThanks for feedback. I have updated the text.
Delete