Namespaces
Variants

std::unordered_multiset<Key,Hash,KeyEqual,Allocator>:: erase

From cppreference.net

(1)
iterator erase ( iterator pos ) ;
(depuis C++11)
(jusqu'à C++23)
iterator erase ( iterator pos )
requires ( ! std:: same_as < iterator, const_iterator > ) ;
(depuis C++23)
(constexpr depuis C++26)
iterator erase ( const_iterator pos ) ;
(2) (depuis C++11)
(constexpr depuis C++26)
iterator erase ( const_iterator first, const_iterator last ) ;
(3) (depuis C++11)
(constexpr depuis C++26)
size_type erase ( const Key & key ) ;
(4) (depuis C++11)
(constexpr depuis C++26)
template < class K >
size_type erase ( K && x ) ;
(5) (depuis C++23)
(constexpr depuis C++26)

Supprime les éléments spécifiés du conteneur. L'ordre des éléments restants est préservé. (Cela permet de supprimer des éléments individuels lors du parcours du conteneur.)

1,2) Supprime l'élément à la position pos .
Une seule surcharge est fournie si iterator et const_iterator sont du même type.
3) Supprime les éléments dans l'intervalle [ first , last ) , qui doit être un intervalle valide dans * this .
4) Supprime tous les éléments dont la clé est équivalente à key .
5) Supprime tous les éléments dont la clé est équivalente à la valeur x .
Cette surcharge participe à la résolution de surcharge seulement si Hash et KeyEqual sont tous deux transparents , et que ni iterator ni const_iterator ne sont implicitement convertibles depuis K . Cela suppose qu'un tel Hash peut être appelé avec à la fois le type K et le type Key , et que le KeyEqual est transparent, ce qui, ensemble, permet d'appeler cette fonction sans construire une instance de Key .

Les références et itérateurs vers les éléments supprimés sont invalidés. Les autres itérateurs et références ne sont pas invalidés.

L'itérateur pos doit être déréférençable. Ainsi l'itérateur end() (qui est valide, mais n'est pas déréférençable) ne peut pas être utilisé comme valeur pour pos .

Table des matières

Paramètres

pos - itérateur vers l'élément à supprimer
first, last - la paire d'itérateurs définissant la plage des éléments à supprimer
key - valeur de clé des éléments à supprimer
x - une valeur de tout type pouvant être comparée de manière transparente avec une clé désignant les éléments à supprimer

Valeur de retour

1-3) Itérateur suivant le dernier élément supprimé.
4) Nombre d'éléments supprimés.
5) Nombre d'éléments supprimés.

Exceptions

1-3) Ne lance rien.
4,5) Toute exception levée par les objets Hash et KeyEqual .

Complexité

Étant donné une instance c de unordered_multiset :

1,2) Cas moyen : constant, cas le plus défavorable : c. size ( ) .
3) Cas moyen : std:: distance ( first, last ) , cas le plus défavorable : c. size ( ) .
4) Cas moyen : c. count ( key ) , cas le plus défavorable : c. size ( ) .
5) Cas moyen : c. count ( x ) , cas le plus défavorable : c. size ( ) .

Notes

Macro de test de fonctionnalité Valeur Std Fonctionnalité
__cpp_lib_associative_heterogeneous_erasure 202110L (C++23) Effacement hétérogène dans les conteneurs associatifs et les conteneurs associatifs non ordonnés ; surcharge ( 5 )

Exemple

#include <unordered_set>
#include <iostream>
int main()
{
    std::unordered_multiset<int> c = {1, 2, 3, 4, 1, 2, 3, 4};
    auto print = [&c]
    {
        std::cout << "c = { ";
        for (int n : c)
            std::cout << n << ' ';
        std::cout << "}\n";
    };
    print();
    std::cout << "Supprimer tous les nombres impairs :\n";
    for (auto it = c.begin(); it != c.end();)
    {
        if (*it % 2 != 0)
            it = c.erase(it);
        else
            ++it;
    }
    print();
    std::cout << "Supprimer 1, nombre supprimé : " << c.erase(1) << '\n';
    std::cout << "Supprimer 2, nombre supprimé : " << c.erase(2) << '\n';
    std::cout << "Supprimer 2, nombre supprimé : " << c.erase(2) << '\n';
    print();
}

Sortie possible :

c = { 1 1 2 2 3 3 4 4 }
Erase all odd numbers:
c = { 2 2 4 4 }
Erase 1, erased count: 0
Erase 2, erased count: 2
Erase 2, erased count: 0
c = { 4 4 }

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Appliqué à Comportement publié Comportement corrigé
LWG 2059 C++11 il y avait une ambiguïté pour la surcharge ( 2 ) surcharge ajoutée ( 1 )
LWG 2356 C++11 l'ordre des éléments non équivalents qui ne sont
pas effacés n'était pas garanti d'être préservé
doit être préservé

Voir aussi

efface le contenu
(fonction membre publique)