std::multiset în C++

Mulțime ordonată care permite valori repetate; util pentru valori sortate cu frecvență.

Sintaxă
#include <set>

std::multiset<T> nume;

Ce face std::multiset

std::multiset este un std::set care păstrează și duplicatele. Elementele rămân sortate, iar count(x) spune de câte ori apare x.

Atenție la ștergere: erase(x) șterge toate aparițiile lui x. Ca să ștergi una singură, șterge prin iterator: ms.erase(ms.find(x)) (după ce verifici că find nu a returnat end()).

Parametri

Parametru Descriere
T Tipul elementelor.

Ce returnează

Un obiect multiset; insert returnează mereu un iterator la elementul nou.

Exemple

Exemplul 1: Note sortate, cu repetiții

#include <print>
#include <set>

int main() {
    std::multiset<int> note{8, 10, 7, 10, 9, 10};
    std::println("{}", note);
    std::println("Note de 10: {}", note.count(10));

    note.erase(note.find(10));       // șterge un singur 10
    std::println("După ștergerea unui 10: {}", note);
    note.erase(10);                  // șterge toți 10
    std::println("După erase(10): {}", note);
}

Rezultat

{7, 8, 9, 10, 10, 10}
Note de 10: 3
După ștergerea unui 10: {7, 8, 9, 10, 10}
După erase(10): {7, 8, 9}

Greșeli frecvente

  • Scrii ms.erase(valoare) ca să ștergi o singură apariție și le pierzi pe toate. Folosește ms.erase(ms.find(valoare)).
  • Apelezi ms.erase(ms.find(x)) fără să verifici dacă x există: erase(end()) este comportament nedefinit.

Comenzi înrudite

  • std::set: Mulțime ordonată de valori unice: elimină automat duplicatele și păstrează elementele sortate.
  • std::multimap: Ca std::map, dar aceeași cheie poate apărea de mai multe ori, cu valori diferite.
  • std::unordered_set: Mulțime de valori unice bazată pe hash: verificare „există?” în timp mediu constant, fără ordine.