Ne dorim:
În acest tutorial vom folosi clasa std::map din STL. Pentru mai multe detalii, vă sugerăm să citiți documentația oficială ( std::map).
Atenție! Este nevoie să includem biblioteca queue.
#include <map> // std::map
Clasa std::map oferă toate funcționalitățile uzuale pentru un HashTable. Menționăm că nu există o implementare unică, astfel încât apar diferențe față de implementările sugerate în articol (de exemplu cheile din map sunt unice). În continuare ne vom referi doar la următoatele funcționalități:
Se dă un număr n foarte mare și n stringuri. Se cere să se afișeze pe ecran numărul de apariții al fiecărui string utilizând un spațiu de memorie cât mai mic.
Soluție: Vom simula funcționalitatea unui vector de frecvență folosinf std::map.
#include <iostream> // std::cout #include <map> // std::map int main() { int n; // numarul de elemente din lista std::string x; // variabila temporara std::map <std::string, int> hash; // map-ul (hash-ul) folosit // citire elemente si adaugare in stiva std::cout << "n = "; std::cin >> n; for (int i = 0; i < n; ++i) { // citeste un alt element std::cout << "x = "; std::cin >> x; // adauga o aparitie a lui x ++hash[ x ]; // afisare statistici std::cout << x << " apare de " << hash[x] << " ori; hash size = " << hash.size() << "\n"; } // parcurgerea elementelor din hash std::cout << "Stare finala hash\n"; std::cout << "hash size = " << hash.size() << '\n'; for (std::map <std::string, int> :: iterator it = hash.begin(); it != hash.end(); ++it) { // extrag key si value std::string key = it->first; int value = it->second; // afisez de cate ori a fost intalnit key std::cout << key << " apare de " << value << " ori\n"; } std::cout << "Golesc hash\n"; hash.clear(); std::cout << (hash.empty() ? "Hash gol" : "Hash contine elemente") << '\n'; return 0; }
Compilare
g++ main.cpp -o main
Exemple:
./main n = 10 x = SD SD apare de 1 ori; hash size = 1 x = PL PL apare de 1 ori; hash size = 2 x = MN MN apare de 1 ori; hash size = 3 x = SD SD apare de 2 ori; hash size = 3 x = SD SD apare de 3 ori; hash size = 3 x = PL PL apare de 2 ori; hash size = 3 x = CMOS CMOS apare de 1 ori; hash size = 4 x = BUCURIE BUCURIE apare de 1 ori; hash size = 5 x = cmos cmos apare de 1 ori; hash size = 6 x = proiect proiect apare de 1 ori; hash size = 7 Stare finala hash hash size = 7 BUCURIE apare de 1 ori CMOS apare de 1 ori MN apare de 1 ori PL apare de 2 ori SD apare de 3 ori cmos apare de 1 ori proiect apare de 1 ori Golesc hash Hash gol