#include <iostream> // cin, cout et cerr.
#include <string>   // Chaînes de caractères.
#include <map>      // Tableaux associatifs de la STL -- map et multimap.

using namespace std ;

typedef multimap<string, string> MultiDict ; // Pour simplifier la syntaxe.
MultiDict mon_multi_dict ;                   // Répertoire téléphonique.

// Insertion d'une nouvelle entrée dans le répertoire.
void
insertion(const string & nom, const string & num_tel)
{
	// Pour les multimaps, on ne peut pas coder `mon_multi_dict[nom] = num_tel ;' ;
	// Il faut utiliser `mon_multi_dict.insert(make_pair(nom, num_tel)) ;'.
	mon_multi_dict.insert(make_pair(nom, num_tel)) ;
}
int
main()
{
	insertion("Anne", "01 23 45 67 89") ;
	insertion("Anne", "06 23 45 67 89") ;
	insertion("Bernard", "01 98 76 54 32") ;
	insertion("Bernard", "06 98 76 54 32") ;
	while ( true )
	{
		cout << "Nom (Ctrl-C pour terminer) ? " ;
		string ligne ; 
		if ( ! getline(cin, ligne) ) {
			break ; }
		pair<MultiDict::iterator, MultiDict::iterator> r = mon_multi_dict.equal_range(ligne) ;
		if ( r.first == r.second ) {
			cout << "Nom absent du répertoire." << endl ; }
		else {
			for ( MultiDict::iterator i = r.first ; i != r.second ; ++ i ) {
				cout << i->first << '\t' << i->second << endl ; } }
	}
	return 0 ; // Retour au système d'exploitation avec le code `0'.
}
