	//Código de las páginas 395-396	

	#include <iostream>
	#include <string>
	#include <map>
	using namespace std;

	typedef multimap<int, string> MAP;

	template <class T> void muestra(const multimap<T, string> &l) {
      MAP::iterator i;
      // Recorre y muestra el conjunto
      for (i = l.begin(); i != l.end(); ++i)
        cout << i->first << " "<<i->second<<endl;
      cout << endl;
	}

	void main() {
      MAP m1;
      MAP::iterator it;

      // Inserta en el conjunto los siguientes pares
      m1.insert(MAP::value_type(0,"Vicente"));
      m1.insert(MAP::value_type(1,"Marta"));
      m1.insert(MAP::value_type(2,"Jose"));
      m1.insert(MAP::value_type(3,"Cecilia"));
      m1.insert(MAP::value_type(4,"Antonio"));
      m1.insert(MAP::value_type(5,"Carla"));
      muestra(m1);

      // Lo incluye. Estará duplicado el 2
      m1.insert(MAP::value_type(2,"Carlos"));
      muestra(m1);

      // Encuentra el valor 3 en el conjunto y lo muestra junto
	  // con su valor asociado
      it=m1.find(3);
      if (it!=m1.end()) cout<<(*it).first<<" " <<(*it).second<<endl;
      else cout<<"No encontrado\n";
	}
