Table of Contents

Tutorial 7.1 - Frequency vector

Frequency vector

Ne dorim:

Frequency vector

Î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:

Implementare cu std::map

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;
}

Testare

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