111 votes

Dans std::multiset existe-t-il une fonction ou un algorithme pour effacer un seul échantillon (unicate ou duplicate) si un élément est trouvé

C'est peut-être un doublon mais je n'ai rien trouvé en cherchant : Lorsque erase(value) est appelé sur std::multiset tous les éléments avec la valeur trouvée sont supprimés. La seule solution à laquelle j'ai pensé est :

 std::multiset<int>::iterator hit(mySet.find(5));
if (hit!= mySet.end()) mySet.erase(hit);

C'est ok mais j'ai pensé qu'il pourrait y avoir mieux. Des idées ?

47voto

user2251346 Points 181
auto itr = my_multiset.find(value);
if(itr!=my_multiset.end()){
    my_multiset.erase(itr);
}

J'imagine qu'il existe un moyen plus propre d'accomplir la même chose. Mais cela fait le travail.

44voto

Strange Points 11

Essaye celui-là:

 multiset<int> s;
s.erase(s.lower_bound(value));

Tant que vous pouvez vous assurer que le value existe dans l'ensemble. Ça marche.

4voto

 if(my_multiset.find(key)!=my_multiset.end())
   my_multiset.erase(my_multiset.equal_range(key).first);

C'est le meilleur moyen auquel je puisse penser pour supprimer une seule instance dans un multi-ensemble en c++

3voto

Yukty Points 21

Cela a fonctionné pour moi:

 multi_set.erase(multi_set.find(val));

si val existe dans le multi-ensemble.

1voto

Sid Points 4070

Pas à ma connaissance, mais vous pouvez faire une recherche () et effacer ().

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X