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ă.findreturnează o pereche oarecare cu acea cheie; pentru toate, foloseșteequal_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.