Posted on

Maps are a part of the C++ STL.Maps are associative containers that store elements formed by a combination of a key value and a mapped value, following a specific order.The mainly used member functions of maps are:

  • Map Template:std::map <key_type, data_type>
  • Declaration:map<string,int>m; //Creates a map m where key_type is of type string and data_type is of type int.
  • Size:int length=m.size(); //Gives the size of the map.
  • Insert:m.insert(make_pair("hello",9)); //Here the pair is inserted into the map where the key is "hello" and the value associated with it is 9.
  • Erasing an element:m.erase(val); //Erases the pair from the map where the key_type is val.
  • Finding an element:map<string,int>::iterator itr=m.find(val); //Gives the iterator to the element val if it is found otherwise returns m.end() . Ex: map<string,int>::iterator itr=m.find("Maps"); //If Maps is not present as the key value then itr==m.end().
  • Accessing the value stored in the key:To get the value stored of the key "MAPS" we can do m["MAPS"] or we can get the iterator using the find function and then by itr->second we can access the value.

To know more about mapsĀ click Here.

Example

There is no direct edit option as in C++11(insert_or_assign emerges in C++17), so for modification, you have to combine erase and insert.

#include <cmath>
#include <cstdio>
#include <vector>
#include <iostream>
#include <set>
#include <map>
#include <algorithm>
using namespace std;


int main() {
    /* Enter your code here. Read input from STDIN. Print output to STDOUT */   
    int N;
    map<string, int> m;

    cin >> N;
    
    for(int i = 0; i < N; i++) {
        string name;
        int type, mark;
        cin >> type >> name;
        map<string, int>::iterator itr = m.find(name);
        // cout << type << name << endl;
        switch(type) {
            case 1:
                cin >> mark;
                if(itr != m.end()) {
                    mark += itr->second;
                }
                m.erase(name);
                m.insert(make_pair(name, mark));
                break;
            case 2:
                m.erase(name);
                break;
            case 3:
                if(itr != m.end()) {
                    cout << itr->second << endl;
                } else {
                    cout << 0 << endl;
                }
                break;
        }

    }
    return 0;
}

Leave a Reply

Your email address will not be published. Required fields are marked *