std::unordered_multiset
est un conteneur associatif qui contient un ensemble d'objets potentiellement non uniques de type Key. La recherche, l'insertion et la suppression ont une complexité temporelle moyenne constante.
En interne, les éléments ne sont pas triés dans un ordre particulier, mais organisés en compartiments. Le compartiment dans lequel un élément est placé dépend entièrement du hachage de sa valeur. Cela permet un accès rapide aux éléments individuels, car une fois le hachage calculé, il fait référence au compartiment exact où l'élément est placé.
L'ordre d'itération de ce conteneur n'est pas requis d'être stable (ainsi, par exemple,
std::equal
ne peut pas être utilisé pour comparer deux
std::unordered_multiset
s), sauf que chaque groupe d'éléments dont les clés sont
équivalentes
(comparées égales avec
key_eq()
comme comparateur) forme un sous-intervalle contigu dans l'ordre d'itération, également accessible avec
equal_range()
.
Toutes les fonctions membres de
std::unordered_multiset
sont
constexpr
: il est possible de créer et d'utiliser des objets
std::unordered_multiset
lors de l'évaluation d'une expression constante.
Cependant, les objets
std::unordered_multiset
ne peuvent généralement pas être
constexpr
, car toute mémoire allouée dynamiquement doit être libérée lors de la même évaluation d'expression constante.
un type d'itérateur dont les types catégorie, valeur, différence, pointeur et référence sont les mêmes que iterator. Cet itérateur peut être utilisé pour itérer dans un seul compartiment mais pas entre les compartiments
const_local_iterator
un type d'itérateur dont les types catégorie, valeur, différence, pointeur et référence sont les mêmes que const_iterator. Cet itérateur peut être utilisé pour itérer dans un seul compartiment mais pas entre les compartiments
node_type(depuis C++17)
une spécialisation de node handle représentant un nœud de conteneur
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 fonctions 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 fonction unique avec un paramètre de type
const_iterator
fonctionnera à la place.