Namespaces
Variants

std:: multiset

From cppreference.net
Défini dans l'en-tête <set>
template <

class Key,
class Compare = std:: less < Key > ,
class Allocator = std:: allocator < Key >

> class multiset ;
(1)
namespace pmr {

template <
class Key,
class Compare = std:: less < Key >
> using multiset = std :: multiset < Key, Compare, std:: pmr :: polymorphic_allocator < Key >> ;

}
(2) (depuis C++17)

std::multiset est un conteneur associatif qui contient un ensemble trié d'objets de type Key. Contrairement à set, plusieurs clés avec des valeurs équivalentes sont autorisées. Le tri est effectué en utilisant la fonction de comparaison de clés Compare. Les opérations de recherche, d'insertion et de suppression ont une complexité logarithmique.

Partout où la bibliothèque standard utilise les exigences Compare , l'équivalence est déterminée en utilisant la relation d'équivalence comme décrit sur Compare . En termes approximatifs, deux objets a et b sont considérés équivalents si aucun n'est comparé comme inférieur à l'autre : ! comp ( a, b ) && ! comp ( b, a ) .

L'ordre des éléments qui sont équivalents par comparaison est l'ordre d'insertion et ne change pas.

(since C++11)

std::multiset satisfait aux exigences de Container , AllocatorAwareContainer , AssociativeContainer et ReversibleContainer .

Toutes les fonctions membres de std::multiset sont constexpr : il est possible de créer et d'utiliser des objets std::multiset lors de l'évaluation d'une expression constante.

Cependant, les objets std::multiset ne peuvent généralement pas être constexpr , car toute allocation de mémoire dynamique doit être libérée lors de la même évaluation d'expression constante.

(depuis C++26)

Table des matières

Paramètres du modèle

Types membres

Type Définition
key_type Key
value_type Key
size_type Type entier non signé (généralement std::size_t )
difference_type Type entier signé (généralement std::ptrdiff_t )
key_compare Compare
value_compare Compare
allocator_type Allocator
reference value_type &
const_reference const value_type &
pointer

Allocator::pointer

(jusqu'en C++11)

std:: allocator_traits < Allocator > :: pointer

(depuis C++11)
const_pointer

Allocator::const_pointer

(jusqu'en C++11)

std:: allocator_traits < Allocator > :: const_pointer

(depuis C++11)
iterator Itérateur constant LegacyBidirectionalIterator et ConstexprIterator (depuis C++26) vers value_type
const_iterator LegacyBidirectionalIterator et ConstexprIterator (depuis C++26) vers const value_type
reverse_iterator std:: reverse_iterator < iterator >
const_reverse_iterator std:: reverse_iterator < const_iterator >
node_type (depuis C++17) une spécialisation de node handle représentant un nœud de conteneur

Fonctions membres

construit le multiset
(fonction membre publique)
détruit le multiset
(fonction membre publique)
assigne des valeurs au conteneur
(fonction membre publique)
retourne l'allocateur associé
(fonction membre publique)
Itérateurs
retourne un itérateur vers le début
(fonction membre publique)
(C++11)
retourne un itérateur vers la fin
(fonction membre publique)
retourne un itérateur inverse vers le début
(fonction membre publique)
(C++11)
retourne un itérateur inverse vers la fin
(fonction membre publique)
Capacité
vérifie si le conteneur est vide
(fonction membre publique)
retourne le nombre d'éléments
(fonction membre publique)
retourne le nombre maximum possible d'éléments
(fonction membre publique)
Modificateurs
efface le contenu
(fonction membre publique)
insère des éléments ou des nœuds (depuis C++17)
(fonction membre publique)
insère une plage d'éléments
(fonction membre publique)
(C++11)
construit un élément en place
(fonction membre publique)
construit des éléments en place en utilisant un indice
(fonction membre publique)
efface les éléments
(fonction membre publique)
échange le contenu
(fonction membre publique)
(C++17)
extrait les nœuds du conteneur
(fonction membre publique)
(C++17)
épisse les nœuds d'un autre conteneur
(fonction membre publique)
Recherche
retourne le nombre d'éléments correspondant à une clé spécifique
(fonction membre publique)
trouve l'élément avec une clé spécifique
(fonction membre publique)
(C++20)
vérifie si le conteneur contient un élément avec une clé spécifique
(fonction membre publique)
renvoie la plage d'éléments correspondant à une clé spécifique
(fonction membre publique)
retourne un itérateur vers le premier élément non inférieur à la clé donnée
(fonction membre publique)
retourne un itérateur vers le premier élément supérieur à la clé donnée
(fonction membre publique)
Observateurs
renvoie la fonction qui compare les clés
(fonction membre publique)
renvoie la fonction qui compare les clés dans les objets de type value_type
(fonction membre publique)

Fonctions non membres

(supprimé en C++20) (supprimé en C++20) (supprimé en C++20) (supprimé en C++20) (supprimé en C++20) (C++20)
compare lexicographiquement les valeurs de deux multiset s
(modèle de fonction)
spécialise l'algorithme std::swap
(modèle de fonction)
efface tous les éléments satisfaisant des critères spécifiques
(modèle de fonction)

Guides de déduction

(depuis C++17)

Notes

Les types membres iterator et const_iterator peuvent être des alias vers le même type. Cela signifie que définir une paire de surcharges de fonction utilisant ces deux types comme types de paramètres peut violer la Règle de Définition Unique . Puisque iterator est convertible en const_iterator , une seule fonction avec un paramètre de type const_iterator fonctionnera à la place.

Macro de test de fonctionnalité Valeur Std Fonctionnalité
__cpp_lib_containers_ranges 202202L (C++23) Construction et insertion de plages pour les conteneurs
__cpp_lib_constexpr_set 202502L (C++26) constexpr std::multiset

Exemple

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 Applicable à Comportement publié Comportement corrigé
LWG 103 C++98 l'itérateur permet la modification des clés itérateur rendu constant
LWG 230 C++98 Key n'était pas requis d'être CopyConstructible
(une clé de type Key pourrait ne pas pouvoir être construite)
Key est également requis
d'être CopyConstructible

Voir aussi

collection de clés uniques, triées par clés
(modèle de classe)
collection de clés, hachée par clés
(modèle de classe)
adapte un conteneur pour fournir une collection de clés, triées par clés
(modèle de classe)