#include #include #include typedef std::unordered_map map; typedef std::unordered_map::const_iterator iter; map m; void cauta(int cheie) { iter i = m.find(cheie); if (i == m.end()) { printf("Nu am găsit cheia %d\n", cheie); } else { assert(i->first == cheie); printf("Am găsit perechea %d -> %d\n", i->first, i->second); } } int main(void) { // Inserare m[17] = 25; // sau, echivalent, m[-23] = 19; cauta(17); // tipărește 17 -> 25 cauta(-23); // tipărește -23 -> 19 cauta(12); // tipărește „nu am găsit” // Modificare m[17] = 30; cauta(17); // tipărește 17 -> 30 // Ștergere m.erase(17); cauta(17); // tipărește „nu am găsit” // Atenție! Operatorul [] este comod pentru căutare... printf("%d\n", m[-23]); // tipărește 19 // ... dar are două probleme. Problema 1: ambiguitate m[1001] = 0; printf("%d\n", m[1001]); // tipărește 0 (pentru că l-am inserat noi) printf("%d\n", m[1002]); // tipărește 0 (negăsit) // Problema 2: modifică tabela cauta(1003); // tipărește „nu am găsit” printf("%d\n", m[1003]); // tipărește 0 (negăsit) cauta(1003); // tipărește 1003 -> 0 }