#include <iostream>
#include <map>

using namespace std;

void print(map<int,int>& s)
{
    cout << "\nmp = {";
    for(auto p = s.begin(); p!= s.end();)
        cout << p->first << "->" << p->second << ",}"[++p==s.end()];
}

void print(multimap<int,int>& s)
{
    cout << "\nmmp = {";
    for(auto p = s.begin(); p!= s.end();)
        cout << p->first << "->" << p->second << ",}"[++p==s.end()];
}

int main()
{
    map<int,int> s;
    s[1]=1, s[2]=4, s[3]=9, s[4]=16, s[5]=25, s[6]=36, s[7]=49;
    print(s);
    map<int,int> s2 = {{1,11},{2,12},{3,13}};
    print(s2);
    s.erase(3);
    print(s);
    map<int,int>::iterator ix = s.find(4);
    s.erase(ix);
    print(s);
    s.erase(s.find(5), s.find(9));
    print(s);
    cout << "\nCount of 1: " << s.count(1);
    cout << "\nCount of 2: " << s.count(2);
    print(s);
    
    auto it = s.lower_bound(5);
    cout << "\nThe lower bound of 5 is " << it->first << ".";
    
    auto it_pair  = s.equal_range(1);
    cout << "\nThe bounds of 1 are " << it_pair.first->first << " and " << it_pair.second->first << ".";
    
	multimap<int,int> ms;
    ms.insert({1,1});
    ms.insert({2,4});
    ms.insert({2,9});
    ms.insert({2,16});
    ms.insert({5,25});
	print(ms);
	
	it_pair = ms.equal_range(2);
    ms.erase(it_pair.first, it_pair.second);
    print(ms);
}