std::multimap în C++

Ca std::map, dar aceeași cheie poate apărea de mai multe ori, cu valori diferite.

Sintaxă
#include <map>

std::multimap<Cheie, Valoare> nume;
std::pair<iterator, iterator> equal_range(const Cheie& cheie);

Ce face std::multimap

std::multimap păstrează perechile sortate după cheie, la fel ca std::map, dar permite chei repetate: de exemplu mai multe note pentru același elev. Perechile cu aceeași cheie stau una lângă alta, în ordinea în care au fost adăugate.

Nu are operator[] și nici at, pentru că o cheie nu are o singură valoare. Adaugi cu insert sau emplace, numeri cu count(cheie), iar toate valorile unei chei le obții cu equal_range(cheie), care returnează intervalul lor.

Parametri

Parametru Descriere
Cheie, Valoare Tipurile cheilor și valorilor, ca la std::map.
cheie Pentru equal_range/count: cheia căutată.

Ce returnează

equal_range: o pereche de iteratori [început, sfârșit) cu toate elementele cheii.

Exemple

Exemplul 1: Mai multe note pentru același elev

#include <map>
#include <print>
#include <string>

int main() {
    std::multimap<std::string, int> note;
    note.insert({"Ana", 9});
    note.insert({"Ion", 7});
    note.insert({"Ana", 10});
    note.emplace("Ana", 8);

    std::println("Ana are {} note", note.count("Ana"));
    auto [inceput, sfarsit] = note.equal_range("Ana");
    for (auto it = inceput; it != sfarsit; ++it) {
        std::print("{} ", it->second);
    }
    std::println();
    std::println("{}", note);
}

Rezultat

Ana are 3 note
9 10 8 
{"Ana": 9, "Ana": 10, "Ana": 8, "Ion": 7}

Greșeli frecvente

  • Apelezi note.erase("Ana") ca să ștergi o singură notă. Ștergerea după cheie elimină toate perechile cu acea cheie; ca să ștergi una, șterge prin iterator (note.erase(it)).
  • Folosești find și te aștepți la ultima valoare adăugată. find returnează o pereche oarecare cu acea cheie; pentru toate, folosește equal_range.

Comenzi înrudite

  • std::map: Dicționar ordonat: asociază fiecărei chei unice o valoare și păstrează cheile sortate.
  • std::multiset: Mulțime ordonată care permite valori repetate; util pentru valori sortate cu frecvență.
  • std::unordered_multimap: Tabelă hash care permite aceeași cheie de mai multe ori; elementele nu au o ordine anume.
  • std::map::lower_bound: lower_bound() găsește prima cheie mai mare sau egală cu valoarea dată, upper_bound() prima cheie strict mai mare.