#include #include #include //si vous en avez besoin #include #include #include "noeud.h" using namespace std; /*********************************************************** Code pour la partie 2 ***********************************************************/ //Représente un individu de la population. struct Personne { int id; string province; string ville; Personne() : Personne(0, "", "") { } Personne(int id, string province, string ville) { this->id = id; this->province = province; this->ville = ville; } }; void afficher_populations(vector& personnes) { //à implémenter map > comptes; set ids; for (Personne& p : personnes) { if (ids.find(p.id) != ids.end()) { cout << "Erreur: il y a un id avec un duplicat!" << endl; return; } ids.insert(p.id); if (comptes.find(p.province) == comptes.end() || comptes[p.province].find(p.ville) == comptes[p.province].end()) { comptes[p.province][p.ville] = 1; } else { comptes[p.province][p.ville]++; } } for (auto it_prov : comptes) { for (auto it_ville : comptes[it_prov.first]) { cout << it_prov.first << ", " << it_ville.first << ":" << it_ville.second << endl; } } } /** Fait le parcours à partir du noeud n avec l'itérateur. **/ void iterer(Noeud* n) { for (Noeud::iterator it = n->begin(); it != n->end(); ++it) { cout<<(*it)<<" "; } cout<* n) { Noeud::iterator itrev = n->end(); itrev--; while (itrev != n->begin()) { cout<<(*itrev)<<" "; itrev--; } cout<<(*itrev); //pour ne pas manquer le begin() cout<* racine = new Noeud(13); Noeud* n3 = racine->ajouter_enfant(3); Noeud* n12 = racine->ajouter_enfant(12); n3->ajouter_enfant(1); n3->ajouter_enfant(2); n12->ajouter_enfant(4); n12->ajouter_enfant(5); n12->ajouter_enfant(7)->ajouter_enfant(6); //oui ceci fonctionne n12->ajouter_enfant(8); Noeud* n11 = n12->ajouter_enfant(11); n11->ajouter_enfant(9); n11->ajouter_enfant(10); cout<<"Sortie avec afficher_postordre():"<afficher_postordre(); cout<::iterator it = racine->begin(); it = ++(++it); //3 cout<<(*it)<<" "; it--; cout<<(*it)<<" "; //2 ++ ++ ++it; //5 cout<<(*it)<<" "; -- --it; //3 cout<<(*it)<<" "; ++ ++ ++ ++it; ++ -- ++ -- --it; //6 cout<<(*it)<<" "; it++; it++; it++; it++; it++; it++; it++; it--; it--; it++; it++; it++; cout<<(it == racine->end() ? "fin" : "non-fin")<<" "; cout<* rcopie = new Noeud(*racine); auto it = rcopie->begin(); while (it != rcopie->end()) { cout << *it << " "; if (*it == 4) { rcopie->get_enfant(1)->supprimer_enfant(1); rcopie->get_enfant(1)->supprimer_enfant(1); } it++; } delete rcopie; delete racine; /********************************** Tests partie 2 ***********************************/ vector v; v.push_back(Personne(1, "Quebec", "Sherbrooke")); v.push_back(Personne(2, "Ontario", "Windsor")); v.push_back(Personne(3, "Quebec", "Sherbrooke")); v.push_back(Personne(4, "Quebec", "Windsor")); v.push_back(Personne(5, "Alberta", "Calgary")); v.push_back(Personne(6, "Ontario", "Windsor")); v.push_back(Personne(7, "Quebec", "Sherbrooke")); cout << endl << endl << "Tests partie 2" << endl; afficher_populations(v); cout << endl << "Tests duplicat" << endl; v.push_back(Personne(3, "Saskatchewan", "Saskatoon")); afficher_populations(v); return 0; }