De ce contează?
Deschizi agenda telefonică și cauți „Maria". Problema e că ai două Marii și
fiecare are propriul număr de telefon. Un map obișnuit te-ar obliga să alegi:
o singură „Maria", un singur număr. Dar în viață o cheie poate avea mai multe
valori — și exact pentru asta există multimap: ține toate numerele Mariei,
fără să le suprascrie unul pe altul.
Ce este
multimap<Cheie, Valoare> este, ca și map, o colecție de perechi
(cheie, valoare) ținută sortată după cheie. Diferența esențială: map
cere chei unice (a doua inserare cu aceeași cheie o suprascrie), pe când
multimap permite chei duplicate — aceeași cheie poate apărea de oricâte ori,
fiecare cu valoarea ei.
Consecința directă: multimap nu are operatorul m[cheie]. Are sens? Dacă
o cheie are trei valori, ce ar trebui să întoarcă m["Maria"]? Nu există un
singur răspuns, deci operatorul lipsește. În locul lui:
- inserezi cu
insert({cheie, valoare})(sauinsert(make_pair(...))); - scoți toate valorile unei chei cu
equal_range(cheie).
multimap nu are m[cheie] și nu are at(cheie). Ca să ajungi la valorile
unei chei, ceri intervalul lor cu equal_range(cheie): el îți dă un capăt
de început și unul de sfârșit, iar tu parcurgi tot ce e între ele. O cheie cu
două valori îți dă un interval de două perechi.