Namespaces
Variants

std::multimap<Key,T,Compare,Allocator>:: erase

From cppreference.net

iterator erase ( iterator pos ) ;
(1) (constexpr depuis C++26)
iterator erase ( const_iterator pos ) ;
(2) (depuis C++11)
(constexpr depuis C++26)
(3)
iterator erase ( iterator first, iterator last ) ;
(jusqu'à C++11)
iterator erase ( const_iterator first, const_iterator last ) ;
(depuis C++11)
(constexpr depuis C++26)
size_type erase ( const Key & key ) ;
(4) (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 équivalents restants est préservé.

1,2) Supprime l'élément à la position pos .
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 Compare est transparent , et si ni iterator ni const_iterator ne sont implicitement convertibles à partir de K . Cela 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 références et itérateurs ne sont pas affectés.

L'itérateur pos doit être déréférençable. Par conséquent, 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 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 l'objet Compare .

Complexité

Étant donné une instance c de multimap :

1,2) Amorti constant.
3) log ( c. size ( ) ) + std:: distance ( first, last )
4) log ( c. size ( ) ) + c. count ( key )
5) log ( c. size ( ) ) + c. count ( x )

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 <map>
#include <iostream>
int main()
{
    std::multimap<int, std::string> c =
    {
        {1, "one"}, {2, "two"}, {3, "three"},
        {4, "four"}, {5, "five"}, {6, "six"}
    };
    // supprimer tous les nombres impairs de c
    for (auto it = c.begin(); it != c.end();)
    {
        if (it->first % 2 != 0)
            it = c.erase(it);
        else
            ++it;
    }
    for (auto& p : c)
        std::cout << p.second << ' ';
    std::cout << '\n';
}

Sortie :

two four six

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 tel que publié Comportement correct
LWG 130 C++98 le type de retour des surcharges ( 1 ) et ( 3 ) était void (ce n'est pas
cohérent avec l'exigence erase() sur les conteneurs de séquence)
corrigé en iterator
LWG 371 C++98 l'ordre des éléments équivalents qui ne sont
pas effacés n'était pas garanti d'être préservé
requis d'être préservé
LWG 2059 C++11 le remplacement de la surcharge ( 1 ) par la surcharge ( 2 ) a introduit une nouvelle ambiguïté a ajouté la surcharge ( 1 ) à nouveau

Voir aussi

efface le contenu
(fonction membre publique)