se da datele n=6 persoane: numele si sectorul
Ion Ciocana
Mara Botanica
Ion Rascani
Daniel Ciocana
Angela Rascani
Nelu Ciocana
sa se determine numarul de persoane care se afla in acelasi sector de ex:
Ciocana: 3
Botanica: 1
Rascani: 2
am nevoie numai de secventa de cod in c++, nu tot codul
Răspunsuri la întrebare
► PROGRAM C++:
#include <iostream>
#include <string>
#include <unordered_map>
using namespace std;
int main() {
string nume_persoana, nume_cartier;
unordered_map<string, int> cartiere;
int n;
cin >> n;
//Citire si memorare numar de persoane/cartier
for (int i = 0; i < n; i++) {
cin >> nume_persoana >> nume_cartier;
cartiere[nume_cartier]++;
}
//Afisare rezultat
cout << endl;
for (auto& cartier : cartiere) {
cout << cartier.first << " : " << cartier.second << endl;
}
}
► Explicatie :
Daca fiecare cartier ar fi fost numerotat ca un numar de la 1 la n atunci am fi putut folosi un vector de frecventa care sa memoreze de cate ori apare fiecare carier. Pentru fiecare numar de cartier memoram un numar care reprezinta numarul de persoane. Spunem ca cartierul este o cheie iar numarul de locatari o valoare.
De multe ori apare problema in care cheile nu sunt numere intregi intr-un interval finit, ci sunt alte tipuri de date (siruri de caractere, numere zecimale, structuri sau alte obiecte compuse). Pentru acesta problema exista in C++ tipul de date unordered_map care se foloseste de o functie hash pentru a putea corela eficient diferite tipuri de date.
Intre parantezele unghiulare se scriu tipurile de date ale cheilor, respectiv valorilor. In cazul nostru noi vrem ca pentru fiecare sir de caractere sa memoram o valoare intreaga. Deci definitia corecta este unordered_map<string,int>.
Un unordered_map stocheaza datele ca o pereche (pair) de cheie si valoare. Pentru a accesa folosi cheia folosim first, iar pentru a accesa valoarea folosind second.