La classe unordered_set
Le modèle de classe décrit un objet qui contrôle une séquence de longueur variable d’éléments de type const Key
. La séquence est triée par ordre faible avec une fonction de hachage, qui partitionne la séquence en un ensemble trié de sous-séquences appelées compartiments. Dans chaque compartiment, une fonction de comparaison détermine si une paire d’éléments a un ordre équivalent. Chaque élément sert à la fois de clé de tri et de valeur. La séquence est représentée de façon à permettre la recherche, l'insertion et la suppression d'un élément arbitraire à l'aide d'un certain nombre d'opérations qui peut être indépendant du nombre d'éléments de la séquence (temps constant), du moins lorsque les compartiments sont de longueur à peu près équivalente. Dans le pire des cas, lorsque tous les éléments se trouvent dans un compartiment, le nombre d'opérations est proportionnel au nombre d'éléments de la séquence (temps linéaire). L’insertion d’un élément invalide aucun itérateur, et la suppression d’un élément invalide uniquement les itérateurs qui pointent vers l’élément supprimé.
Syntaxe
template <
class Key,
class Hash = std::hash<Key>,
class Pred = std::equal_to<Key>,
class Alloc = std::allocator<Key>>
class unordered_set;
Paramètres
Key
Type de clé.
Hash
Type d’objet de la fonction de hachage.
Pred
Type d’objet de fonction de comparaison d’égalité.
Alloc
Classe allocator.
Membres
Typedefs
Nom | Description |
---|---|
allocator_type |
Type d'un allocateur pour la gestion du stockage. |
const_iterator |
Type d'un itérateur constant pour la séquence contrôlée. |
const_local_iterator |
Type d’un itérateur de compartiment constant pour la séquence contrôlée. |
const_pointer |
Type d'un pointeur constant vers un élément. |
const_reference |
Type d'une référence constante à un élément. |
difference_type |
Type d'une distance signée entre deux éléments. |
hasher |
Type de la fonction de hachage. |
iterator |
Type d'un itérateur pour la séquence contrôlée. |
key_equal |
Type de la fonction de comparaison. |
key_type |
Type d'une clé de tri. |
local_iterator |
Type d'un itérateur de compartiment pour la séquence contrôlée. |
pointer |
Type d'un pointeur vers un élément. |
reference |
Type d'une référence à un élément. |
size_type |
Type d'une distance non signée entre deux éléments. |
value_type |
Type d’un élément. |
Functions
Nom | Description |
---|---|
begin |
Désigne le début de la séquence contrôlée. |
bucket |
Obtient le numéro du compartiment pour une valeur de clé. |
bucket_count |
Obtient le nombre de compartiments. |
bucket_size |
Obtient la taille d'un compartiment. |
cbegin |
Désigne le début de la séquence contrôlée. |
cend |
Désigne la fin de la séquence contrôlée. |
clear |
Supprime tous les éléments. |
contains C++20 |
Vérifiez s’il existe un élément avec la clé spécifiée dans le unordered_set . |
count |
Recherche le nombre d’éléments qui correspondent à une clé spécifiée. |
emplace |
Ajoute un élément construit sur place. |
emplace_hint |
Ajoute un élément construit sur place, avec un indicateur. |
empty |
Vérifie l'absence d'éléments. |
end |
Désigne la fin de la séquence contrôlée. |
equal_range |
Recherche une plage qui correspond à une clé spécifiée. |
erase |
Supprime les éléments placés aux positions spécifiées. |
find |
Recherche un élément qui correspond à une clé spécifiée. |
get_allocator |
Obtient l’objet allocateur stocké. |
hash_function |
Obtient l'objet de fonction de hachage stocké. |
insert |
Ajoute des éléments. |
key_eq |
Obtient l'objet de fonction de comparaison stocké. |
load_factor |
Compte le nombre moyen d'éléments par compartiment. |
max_bucket_count |
Obtient le nombre maximal de compartiments. |
max_load_factor |
Obtient ou définit le nombre maximal d’éléments par compartiment. |
max_size |
Obtient ou définit la taille maximale de la séquence contrôlée. |
rehash |
Régénère la table de hachage. |
size |
Compte le nombre d'éléments. |
swap |
Échange le contenu de deux conteneurs. |
unordered_set |
Construit un objet conteneur. |
Opérateurs
Nom | Description |
---|---|
unordered_set::operator= |
Copie une table de hachage. |
Notes
L’objet commande la séquence qu’il contrôle en appelant deux objets stockés, un objet de fonction de comparaison de type unordered_set::key_equal
et un objet de fonction de hachage de type unordered_set::hasher
. Vous accédez au premier objet stocké en appelant la fonction unordered_set::key_eq
()
membre ; et vous accédez au deuxième objet stocké en appelant la fonction unordered_set::hash_function
()
membre . Pour toutes les valeurs X
et Y
de type Key
, l'appel key_eq()(X, Y)
retourne true uniquement si les valeurs des deux arguments ont un classement équivalent. L'appel hash_function()(keyval)
génère une distribution des valeurs de type size_t
. Contrairement à la classe de modèleunordered_multiset
de classe, un objet de type unordered_set
garantit qu’il key_eq()(X, Y)
est toujours faux pour deux éléments de la séquence contrôlée. Les clés sont uniques.
L'objet stocke également un facteur de charge maximale, qui spécifie le nombre moyen maximal d'éléments souhaité par compartiment. Si l’insertion d’un élément entraîne unordered_set::load_factor
()
un dépassement du facteur de charge maximal, le conteneur augmente le nombre de compartiments et reconstruit la table de hachage si nécessaire.
L'ordre réel des éléments de la séquence contrôlée dépend de la fonction de hachage, de la fonction de comparaison, de l'ordre d'insertion, du facteur de charge maximale et du nombre de compartiments. Vous ne pouvez pas prédire en général l’ordre des éléments dans la séquence contrôlée. Toutefois, vous avez la garantie que tous les sous-ensembles d'éléments dont le classement est équivalent sont adjacents dans la séquence contrôlée.
L’objet alloue et libère le stockage pour la séquence qu’il contrôle via un objet allocator stocké de type unordered_set::allocator_type
. Un tel objet allocator doit avoir la même interface externe qu’un objet de type allocator
. L’objet allocator stocké n’est pas copié lorsque l’objet conteneur est affecté.
unordered_set::allocator_type
Type d'un allocateur pour la gestion du stockage.
typedef Alloc allocator_type;
Notes
Le type est un synonyme du paramètre de modèle Alloc
.
Exemple
// std__unordered_set__unordered_set_allocator_type.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>
typedef std::unordered_set<char> Myset;
typedef std::allocator<std::pair<const char, int> > Myalloc;
int main()
{
Myset c1;
Myset::allocator_type al = c1.get_allocator();
std::cout << "al == std::allocator() is "
<< std::boolalpha << (al == Myalloc()) << std::endl;
return (0);
}
al == std::allocator() is true
begin
Désigne le début de la séquence contrôlée ou un compartiment.
iterator begin();
const_iterator begin() const;
local_iterator begin(size_type nbucket);
const_local_iterator begin(size_type nbucket) const;
Paramètres
nbucket
Numéro de compartiment.
Notes
Les deux premières fonctions membres retournent un itérateur vers l'avant qui pointe vers le premier élément de la séquence (ou juste après la fin d'une séquence vide). Les deux dernières fonctions membres retournent un itérateur vers l'avant qui pointe vers le premier élément du compartiment nbucket
(ou juste après la fin d'un compartiment vide).
Exemple
// unordered_set_begin.cpp
// compile using: cl.exe /EHsc /nologo /W4 /MTd
#include <unordered_set>
#include <iostream>
using namespace std;
typedef unordered_set<char> MySet;
int main()
{
MySet c1;
c1.insert('a');
c1.insert('b');
c1.insert('c');
// display contents using range-based for
for (auto it : c1) {
cout << "[" << it << "] ";
}
cout << endl;
// display contents using explicit for
for (MySet::const_iterator it = c1.begin(); it != c1.end(); ++it) {
cout << "[" << *it << "] ";
}
cout << std::endl;
// display first two items
MySet::iterator it2 = c1.begin();
cout << "[" << *it2 << "] ";
++it2;
cout << "[" << *it2 << "] ";
cout << endl;
// display bucket containing 'a'
MySet::const_local_iterator lit = c1.begin(c1.bucket('a'));
cout << "[" << *lit << "] ";
return (0);
}
[a] [b] [c]
[a] [b] [c]
[a] [b]
[a]
bucket
Obtient le numéro du compartiment pour une valeur de clé.
size_type bucket(const Key& keyval) const;
Paramètres
keyval
Valeur de clé à mapper.
Notes
La fonction membre retourne le numéro de compartiment correspondant actuellement à la valeur de clé keyval
.
Exemple
// std__unordered_set__unordered_set_bucket.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>
typedef std::unordered_set<char> Myset;
int main()
{
Myset c1;
c1.insert('a');
c1.insert('b');
c1.insert('c');
// display contents "[c] [b] [a] "
for (Myset::const_iterator it = c1.begin(); it != c1.end(); ++it)
std::cout << "[" << *it << "] ";
std::cout << std::endl;
// display buckets for keys
Myset::size_type bs = c1.bucket('a');
std::cout << "bucket('a') == " << bs << std::endl;
std::cout << "bucket_size(" << bs << ") == " << c1.bucket_size(bs)
<< std::endl;
return (0);
}
[c] [b] [a]
bucket('a') == 7
bucket_size(7) == 1
bucket_count
Obtient le nombre de compartiments.
size_type bucket_count() const;
Notes
La fonction membre retourne le nombre actuel de comportements.
Exemple
// std__unordered_set__unordered_set_bucket_count.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>
typedef std::unordered_set<char> Myset;
int main()
{
Myset c1;
c1.insert('a');
c1.insert('b');
c1.insert('c');
// display contents "[c] [b] [a] "
for (Myset::const_iterator it = c1.begin(); it != c1.end(); ++it)
std::cout << "[" << *it << "] ";
std::cout << std::endl;
// inspect current parameters
std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;
std::cout << "load_factor() == " << c1.load_factor() << std::endl;
std::cout << "max_bucket_count() == "
<< c1.max_bucket_count() << std::endl;
std::cout << "max_load_factor() == "
<< c1.max_load_factor() << std::endl;
std::cout << std::endl;
// change max_load_factor and redisplay
c1.max_load_factor(0.10f);
std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;
std::cout << "load_factor() == " << c1.load_factor() << std::endl;
std::cout << "max_bucket_count() == "
<< c1.max_bucket_count() << std::endl;
std::cout << "max_load_factor() == "
<< c1.max_load_factor() << std::endl;
std::cout << std::endl;
// rehash and redisplay
c1.rehash(100);
std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;
std::cout << "load_factor() == " << c1.load_factor() << std::endl;
std::cout << "max_bucket_count() == "
<< c1.max_bucket_count() << std::endl;
std::cout << "max_load_factor() == "
<< c1.max_load_factor() << std::endl;
std::cout << std::endl;
return (0);
}
[c] [b] [a]
bucket_count() == 8
load_factor() == 0.375
max_bucket_count() == 8
max_load_factor() == 4
bucket_count() == 8
load_factor() == 0.375
max_bucket_count() == 8
max_load_factor() == 0.1
bucket_count() == 128
load_factor() == 0.0234375
max_bucket_count() == 128
max_load_factor() == 0.1
bucket_size
Obtient la taille d’un compartiment.
size_type bucket_size(size_type nbucket) const;
Paramètres
nbucket
Numéro de compartiment.
Notes
Les fonctions membres retournent la taille du compartiment numéro nbucket
.
Exemple
// std__unordered_set__unordered_set_bucket_size.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>
typedef std::unordered_set<char> Myset;
int main()
{
Myset c1;
c1.insert('a');
c1.insert('b');
c1.insert('c');
// display contents "[c] [b] [a] "
for (Myset::const_iterator it = c1.begin(); it != c1.end(); ++it)
std::cout << "[" << *it << "] ";
std::cout << std::endl;
// display buckets for keys
Myset::size_type bs = c1.bucket('a');
std::cout << "bucket('a') == " << bs << std::endl;
std::cout << "bucket_size(" << bs << ") == " << c1.bucket_size(bs)
<< std::endl;
return (0);
}
[c] [b] [a]
bucket('a') == 7
bucket_size(7) == 1
cbegin
Retourne un itérateur const
qui traite le premier élément d'une plage.
const_iterator cbegin() const;
Valeur de retour
Itérateur forward const
qui pointe vers le premier élément de la plage, ou vers l'emplacement situé juste après la fin d'une plage vide (pour une plage vide : cbegin() == cend()
).
Notes
Avec la valeur de retour , les éléments de cbegin
la plage ne peuvent pas être modifiés.
Vous pouvez utiliser cette fonction membre à la place de la fonction membre begin()
afin de garantir que la valeur de retour est const_iterator
. En règle générale, il est utilisé conjointement avec le mot clé de déduction de auto
type, comme illustré dans l’exemple suivant. Dans cet exemple, Container
est supposé être un conteneur modifiable (autre que const
) de type indéfini prenant en charge begin()
et cbegin()
.
auto i1 = Container.begin();
// i1 isContainer<T>::iterator
auto i2 = Container.cbegin();
// i2 isContainer<T>::const_iterator
cend
Retourne un itérateur const
qui traite l'emplacement situé immédiatement après le dernier élément d'une plage.
const_iterator cend() const;
Valeur de retour
Itérateur forward const
qui pointe juste après la fin de la plage.
Notes
cend
est utilisé pour vérifier si un itérateur a dépassé la fin de la plage.
Vous pouvez utiliser cette fonction membre à la place de la fonction membre end()
afin de garantir que la valeur de retour est const_iterator
. En règle générale, il est utilisé conjointement avec le mot clé de déduction de auto
type, comme illustré dans l’exemple suivant. Dans cet exemple, Container
est supposé être un conteneur modifiable (autre que const
) de type indéfini prenant en charge end()
et cend()
.
auto i1 = Container.end();
// i1 isContainer<T>::iterator
auto i2 = Container.cend();
// i2 isContainer<T>::const_iterator
La valeur retournée par cend
ne doit pas être déréférencement.
clear
Supprime tous les éléments.
void clear();
Notes
La fonction membre appelle unordered_set::erase( unordered_set::begin()
, unordered_set::end())
. Pour plus d'informations, consultez unordered_set::erase
, unordered_set::begin
et unordered_set::end
.
Exemple
// std__unordered_set__unordered_set_clear.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>
typedef std::unordered_set<char> Myset;
int main()
{
Myset c1;
c1.insert('a');
c1.insert('b');
c1.insert('c');
// display contents "[c] [b] [a] "
for (Myset::const_iterator it = c1.begin(); it != c1.end(); ++it)
std::cout << "[" << *it << "] ";
std::cout << std::endl;
// clear the container and reinspect
c1.clear();
std::cout << "size == " << c1.size() << std::endl;
std::cout << "empty() == " << std::boolalpha << c1.empty() << std::endl;
std::cout << std::endl;
c1.insert('d');
c1.insert('e');
// display contents "[e] [d] "
for (Myset::const_iterator it = c1.begin(); it != c1.end(); ++it)
std::cout << "[" << *it << "] ";
std::cout << std::endl;
std::cout << "size == " << c1.size() << std::endl;
std::cout << "empty() == " << std::boolalpha << c1.empty() << std::endl;
return (0);
}
[c] [b] [a]
size == 0
empty() == true
[e] [d]
size == 2
empty() == false
const_iterator
Type d'un itérateur constant pour la séquence contrôlée.
typedef T1 const_iterator;
Notes
Le type décrit un objet pouvant servir d'itérateur vers l'avant constant pour la séquence contrôlée. Il est décrit ici comme synonyme du type T1
défini par l’implémentation.
Exemple
// std__unordered_set__unordered_set_const_iterator.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>
typedef std::unordered_set<char> Myset;
int main()
{
Myset c1;
c1.insert('a');
c1.insert('b');
c1.insert('c');
// display contents "[c] [b] [a] "
for (Myset::const_iterator it = c1.begin(); it != c1.end(); ++it)
std::cout << "[" << *it << "] ";
std::cout << std::endl;
return (0);
}
[c] [b] [a]
const_local_iterator
Type d’un itérateur de compartiment constant pour la séquence contrôlée.
typedef T5 const_local_iterator;
Notes
Le type décrit un objet pouvant servir d’itérateur de constante vers l’avant pour un compartiment. Il est décrit ici comme synonyme du type T5
défini par l’implémentation.
Exemple
// std__unordered_set__unordered_set_const_local_iterator.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>
typedef std::unordered_set<char> Myset;
int main()
{
Myset c1;
c1.insert('a');
c1.insert('b');
c1.insert('c');
// display contents "[c] [b] [a] "
for (Myset::const_iterator it = c1.begin(); it != c1.end(); ++it)
std::cout << "[" << *it << "] ";
std::cout << std::endl;
// inspect bucket containing 'a'
Myset::const_local_iterator lit = c1.begin(c1.bucket('a'));
std::cout << "[" << *lit << "] ";
return (0);
}
[c] [b] [a]
[a]
const_pointer
Type d'un pointeur constant vers un élément.
typedef Alloc::const_pointer const_pointer;
Notes
Le type décrit un objet pouvant servir de pointeur constant à un élément de la séquence contrôlée.
Exemple
// std__unordered_set__unordered_set_const_pointer.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>
typedef std::unordered_set<char> Myset;
int main()
{
Myset c1;
c1.insert('a');
c1.insert('b');
c1.insert('c');
// display contents "[c] [b] [a] "
for (Myset::iterator it = c1.begin(); it != c1.end(); ++it)
{
Myset::const_pointer p = &*it;
std::cout << "[" << *p << "] ";
}
std::cout << std::endl;
return (0);
}
[c] [b] [a]
const_reference
Type d'une référence constante à un élément.
typedef Alloc::const_reference const_reference;
Notes
Le type décrit un objet pouvant servir de référence constante à un élément de la séquence contrôlée.
Exemple
// std__unordered_set__unordered_set_const_reference.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>
typedef std::unordered_set<char> Myset;
int main()
{
Myset c1;
c1.insert('a');
c1.insert('b');
c1.insert('c');
// display contents "[c] [b] [a] "
for (Myset::iterator it = c1.begin(); it != c1.end(); ++it)
{
Myset::const_reference ref = *it;
std::cout << "[" << ref << "] ";
}
std::cout << std::endl;
return (0);
}
[c] [b] [a]
contains
Vérifie s’il existe un élément avec la clé spécifiée dans le unordered_set
.
bool contains(const Key& key) const;
template<class K> bool contains(const K& key) const;
Paramètres
K
Type de la clé.
Key
Valeur de clé de l’élément à rechercher.
Valeur de retour
true
si l’élément est trouvé dans le conteneur ; false
autrement.
Notes
contains()
est nouveau en C++20. Pour l’utiliser, spécifiez l’option de compilateur /std :c++20 ou ultérieure.
template<class K> bool contains(const K& key) const
participe uniquement à la résolution de surcharge si key_compare
elle est transparente.
Exemple
// Requires /std:c++20 or /std:c++latest
#include <unordered_set>
#include <iostream>
int main()
{
std::unordered_set<int> theUnorderedSet = { 1, 2 };
std::cout << std::boolalpha; // so booleans show as 'true' or 'false'
std::cout << theUnorderedSet.contains(2) << '\n';
std::cout << theUnorderedSet.contains(3) << '\n';
return 0;
}
true
false
count
Recherche le nombre d’éléments qui correspondent à une clé spécifiée.
size_type count(const Key& keyval) const;
Paramètres
keyval
Valeur de clé à rechercher.
Notes
La fonction membre retourne le nombre d’éléments de la plage délimitée par unordered_set::equal_range
(keyval)
.
Exemple
// std__unordered_set__unordered_set_count.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>
typedef std::unordered_set<char> Myset;
int main()
{
Myset c1;
c1.insert('a');
c1.insert('b');
c1.insert('c');
// display contents "[c] [b] [a] "
for (Myset::const_iterator it = c1.begin(); it != c1.end(); ++it)
std::cout << "[" << *it << "] ";
std::cout << std::endl;
std::cout << "count('A') == " << c1.count('A') << std::endl;
std::cout << "count('b') == " << c1.count('b') << std::endl;
std::cout << "count('C') == " << c1.count('C') << std::endl;
return (0);
}
[c] [b] [a]
count('A') == 0
count('b') == 1
count('C') == 0
difference_type
Type d'une distance signée entre deux éléments.
typedef T3 difference_type;
Notes
Le type d'entier signé décrit un objet qui peut représenter la différence entre les adresses de deux éléments quelconques dans la séquence contrôlée. Il est décrit ici comme synonyme du type T3
défini par l’implémentation.
Exemple
// std__unordered_set__unordered_set_difference_type.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>
typedef std::unordered_set<char> Myset;
int main()
{
Myset c1;
c1.insert('a');
c1.insert('b');
c1.insert('c');
// display contents "[c] [b] [a] "
for (Myset::const_iterator it = c1.begin(); it != c1.end(); ++it)
std::cout << "[" << *it << "] ";
std::cout << std::endl;
// compute positive difference
Myset::difference_type diff = 0;
for (Myset::const_iterator it = c1.begin(); it != c1.end(); ++it)
++diff;
std::cout << "end()-begin() == " << diff << std::endl;
// compute negative difference
diff = 0;
for (Myset::const_iterator it = c1.end(); it != c1.begin(); --it)
--diff;
std::cout << "begin()-end() == " << diff << std::endl;
return (0);
}
[c] [b] [a]
end()-begin() == 3
begin()-end() == -3
emplace
Insère un élément construit sur place (aucune opération de copie ou déplacement n’est effectuée).
template <class... Args>
pair<iterator, bool>
emplace(
Args&&... args);
Paramètres
args
Arguments transférés pour construire un élément à insérer dans le unordered_set
, sauf s’il contient déjà un élément dont la valeur est ordonnée de manière équivalente.
Valeur de retour
Un objet pair
dont le composant bool
retourne true si une insertion a été effectuée et false si la classe unordered_set
contenait déjà un élément dont la clé avait une valeur équivalente dans le classement, et dont le composant itérateur retourne l’adresse où un nouvel élément a été inséré ou l’emplacement où l’élément se trouvait déjà.
Pour accéder au composant itérateur d’une paire pr
retournée par cette fonction membre, utilisez pr.first
et, pour le déréférencer, utilisez *(pr.first)
. Pour accéder au composant bool
d’une paire pr
retournée par cette fonction membre, utilisez pr.second
.
Notes
Aucun itérateur ou référence n’est invalidé par cette fonction.
Pendant l’insertion, si une exception est levée, mais qu’elle ne se produit pas dans la fonction de hachage du conteneur, le conteneur n’est pas modifié. Si l'exception est levée dans la fonction de hachage, le résultat n'est pas défini.
Pour obtenir un exemple de code, consultez set::emplace
.
emplace_hint
Insère un élément construit sur place (aucune opération de copie ni de déplacement n’est effectuée) avec un indicateur de positionnement.
template <class... Args>
iterator emplace_hint(
const_iteratorwhere,
Args&&... args);
Paramètres
args
Arguments transférés pour construire un élément à insérer dans l’élément unordered_set
, sauf si l’élément contient déjà cet élément ou, plus généralement, sauf s’il contient déjà un élément dont la unordered_set
clé est ordonnée de manière équivalente.
where
Indicateur sur l’endroit où commencer à rechercher le point d’insertion correct.
Valeur de retour
Itérateur vers l’élément qui vient d’être inséré.
Si l’insertion a échoué parce que l’élément existe déjà, retourne un itérateur vers l’élément existant.
Notes
Aucun itérateur ou référence n’est invalidé par cette fonction.
Pendant l’insertion, si une exception est levée, mais qu’elle ne se produit pas dans la fonction de hachage du conteneur, le conteneur n’est pas modifié. Si l'exception est levée dans la fonction de hachage, le résultat n'est pas défini.
Pour obtenir un exemple de code, consultez set::emplace_hint
.
empty
Vérifie l'absence d'éléments.
bool empty() const;
Notes
La fonction membre retourne la valeur true pour une séquence contrôlée vide.
Exemple
// std__unordered_set__unordered_set_empty.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>
typedef std::unordered_set<char> Myset;
int main()
{
Myset c1;
c1.insert('a');
c1.insert('b');
c1.insert('c');
// display contents "[c] [b] [a] "
for (Myset::const_iterator it = c1.begin(); it != c1.end(); ++it)
std::cout << "[" << *it << "] ";
std::cout << std::endl;
// clear the container and reinspect
c1.clear();
std::cout << "size == " << c1.size() << std::endl;
std::cout << "empty() == " << std::boolalpha << c1.empty() << std::endl;
std::cout << std::endl;
c1.insert('d');
c1.insert('e');
// display contents "[e] [d] "
for (Myset::const_iterator it = c1.begin(); it != c1.end(); ++it)
std::cout << "[" << *it << "] ";
std::cout << std::endl;
std::cout << "size == " << c1.size() << std::endl;
std::cout << "empty() == " << std::boolalpha << c1.empty() << std::endl;
return (0);
}
[c] [b] [a]
size == 0
empty() == true
[e] [d]
size == 2
empty() == false
end
Désigne la fin de la séquence contrôlée.
iterator end();
const_iterator end() const;
local_iterator end(size_type nbucket);
const_local_iterator end(size_type nbucket) const;
Paramètres
nbucket
Numéro de compartiment.
Notes
Les deux premières fonctions membres retournent un itérateur vers l'avant qui pointe juste après la fin de la séquence. Les deux dernières fonctions membres retournent un itérateur vers l'avant qui pointe juste après la fin du compartiment nbucket
.
Exemple
// std__unordered_set__unordered_set_end.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>
typedef std::unordered_set<char> Myset;
int main()
{
Myset c1;
c1.insert('a');
c1.insert('b');
c1.insert('c');
// display contents "[c] [b] [a] "
for (Myset::const_iterator it = c1.begin(); it != c1.end(); ++it)
std::cout << "[" << *it << "] ";
std::cout << std::endl;
// inspect last two items "[a] [b] "
Myset::iterator it2 = c1.end();
--it2;
std::cout << "[" << *it2 << "] ";
--it2;
std::cout << "[" << *it2 << "] ";
std::cout << std::endl;
// inspect bucket containing 'a'
Myset::const_local_iterator lit = c1.end(c1.bucket('a'));
--lit;
std::cout << "[" << *lit << "] ";
return (0);
}
[c] [b] [a]
[a] [b]
[a]
equal_range
Recherche une plage qui correspond à une clé spécifiée.
std::pair<iterator, iterator>
equal_range(const Key& keyval);
std::pair<const_iterator, const_iterator>
equal_range(const Key& keyval) const;
Paramètres
keyval
Valeur de clé à rechercher.
Notes
La fonction membre retourne une paire d’itérateurs X
tel que [X.first, X.second)
délimite uniquement les éléments de la séquence contrôlée qui ont un classement équivalent à keyval
. Si aucun de ces éléments n’existe, les deux itérateurs sont end()
.
Exemple
// std__unordered_set__unordered_set_equal_range.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>
typedef std::unordered_set<char> Myset;
int main()
{
Myset c1;
c1.insert('a');
c1.insert('b');
c1.insert('c');
// display contents "[c] [b] [a] "
for (Myset::const_iterator it = c1.begin(); it != c1.end(); ++it)
std::cout << "[" << *it << "] ";
std::cout << std::endl;
// display results of failed search
std::pair<Myset::iterator, Myset::iterator> pair1 =
c1.equal_range('x');
std::cout << "equal_range('x'):";
for (; pair1.first != pair1.second; ++pair1.first)
std::cout << "[" << *pair1.first << "] ";
std::cout << std::endl;
// display results of successful search
pair1 = c1.equal_range('b');
std::cout << "equal_range('b'):";
for (; pair1.first != pair1.second; ++pair1.first)
std::cout << "[" << *pair1.first << "] ";
std::cout << std::endl;
return (0);
}
[c] [b] [a]
equal_range('x'):
equal_range('b'): [b]
erase
Supprime d'un emplacement spécifié un élément ou une plage d'éléments compris dans un unordered_set
ou supprime les éléments qui correspondent à une clé spécifiée.
iterator erase(const_iterator Where);
iterator erase(const_iterator First, const_iterator Last);
size_type erase(const key_type& Key);
Paramètres
Where
Position de l’élément à supprimer.
First
Position du premier élément à supprimer.
Last
Position juste après le dernier élément à supprimer.
Key
Valeur de clé des éléments à supprimer.
Valeur de retour
Pour les deux premières fonctions membres, itérateur bidirectionnel qui désigne le premier élément restant au-delà des éléments supprimés, ou un élément qui est la fin du unordered_set
cas où aucun élément de ce type n’existe.
Pour la troisième fonction membre, retourne le nombre d’éléments qui ont été supprimés du unordered_set
.
Notes
Pour obtenir un exemple de code, consultez set::erase.
find
Recherche un élément qui correspond à une clé spécifiée.
const_iterator find(const Key& keyval) const;
Paramètres
keyval
Valeur de clé à rechercher.
Notes
La fonction membre retourne unordered_set::equal_range
(keyval).first
.
Exemple
// std__unordered_set__unordered_set_find.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>
typedef std::unordered_set<char> Myset;
int main()
{
Myset c1;
c1.insert('a');
c1.insert('b');
c1.insert('c');
// display contents "[c] [b] [a] "
for (Myset::const_iterator it = c1.begin(); it != c1.end(); ++it)
std::cout << "[" << *it << "] ";
std::cout << std::endl;
// try to find and fail
std::cout << "find('A') == "
<< std::boolalpha << (c1.find('A') != c1.end()) << std::endl;
// try to find and succeed
Myset::iterator it = c1.find('b');
std::cout << "find('b') == "
<< std::boolalpha << (it != c1.end())
<< ": [" << *it << "] " << std::endl;
return (0);
}
[c] [b] [a]
find('A') == false
find('b') == true: [b]
get_allocator
Obtient l’objet allocateur stocké.
Alloc get_allocator() const;
Notes
La fonction membre retourne l’objet d’allocateur stocké.
Exemple
// std__unordered_set__unordered_set_get_allocator.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>
typedef std::unordered_set<char> Myset;
typedef std::allocator<std::pair<const char, int> > Myalloc;
int main()
{
Myset c1;
Myset::allocator_type al = c1.get_allocator();
std::cout << "al == std::allocator() is "
<< std::boolalpha << (al == Myalloc()) << std::endl;
return (0);
}
al == std::allocator() is true
hash_function
Obtient l'objet de fonction de hachage stocké.
Hash hash_function() const;
Notes
La fonction membre retourne l’objet de fonction de hachage stocké.
Exemple
// std__unordered_set__unordered_set_hash_function.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>
typedef std::unordered_set<char> Myset;
int main()
{
Myset c1;
Myset::hasher hfn = c1.hash_function();
std::cout << "hfn('a') == " << hfn('a') << std::endl;
std::cout << "hfn('b') == " << hfn('b') << std::endl;
return (0);
}
hfn('a') == 1630279
hfn('b') == 1647086
hasher
Type de la fonction de hachage.
typedef Hash hasher;
Notes
Le type est un synonyme du paramètre de modèle Hash
.
Exemple
// std__unordered_set__unordered_set_hasher.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>
typedef std::unordered_set<char> Myset;
int main()
{
Myset c1;
Myset::hasher hfn = c1.hash_function();
std::cout << "hfn('a') == " << hfn('a') << std::endl;
std::cout << "hfn('b') == " << hfn('b') << std::endl;
return (0);
}
hfn('a') == 1630279
hfn('b') == 1647086
insert
Insère un élément ou une plage d’éléments dans un unordered_set
.
// (1) single element
pair<iterator, bool> insert(const value_type& Val);
// (2) single element, perfect forwarded
template <class ValTy>
pair<iterator, bool> insert(ValTy&& Val);
// (3) single element with hint
iterator insert(const_iterator Where, const value_type& Val);
// (4) single element, perfect forwarded, with hint
template <class ValTy>
iterator insert(const_iterator Where, ValTy&& Val);
// (5) range
template <class InputIterator>
void insert(InputIterator First, InputIterator Last);
// (6) initializer list
void insert(initializer_list<value_type> IList);
Paramètres
Val
Valeur d’un élément à insérer dans le unordered_set
sauf s’il contient déjà un élément dont la clé est ordonnée de manière équivalente.
Where
Emplacement où commencer à rechercher le point d'insertion correct.
ValTy
Paramètre de modèle qui spécifie le type d’argument que l’argument unordered_set
peut utiliser pour construire un élément de value_type
, et des forwards parfaits Val
en tant qu’argument.
First
Position du premier élément à copier.
Last
Position juste au-delà du dernier élément à copier.
InputIterator
Argument de fonction de modèle qui répond aux exigences d’un itérateur d’entrée qui pointe vers des éléments d’un type qui peuvent être utilisés pour construire value_type
des objets.
IList
initializer_list
À partir duquel copier les éléments.
Valeur de retour
Les fonctions membres à un élément, (1) et (2), retournent un pair
composant dont bool
le composant est vrai si une insertion a été effectuée, et false si l’élément contient déjà un élément dont la unordered_set
clé a une valeur équivalente dans l’ordre. Le composant itérateur de la paire retour-valeur pointe vers l’élément nouvellement inséré si le bool
composant est true
, ou à l’élément existant si le bool
composant est false
.
Les fonctions membres single-element-with-hint, (3) et (4), retournent un itérateur qui pointe vers la position où le nouvel élément a été inséré dans le unordered_set
ou, si un élément avec une clé équivalente existe déjà, à l’élément existant.
Notes
Aucun itérateur, pointeur ou référence n'est invalidé par cette fonction.
Pendant l’insertion d’un seul élément, si une exception est levée, mais qu’elle ne se produit pas dans la fonction de hachage du conteneur, l’état du conteneur n’est pas modifié. Si l'exception est levée dans la fonction de hachage, le résultat n'est pas défini. Durant l'insertion de plusieurs éléments, si une exception est levée, le conteneur reste dans un état non spécifié mais valide.
Pour accéder au composant itérateur d’un pair
pr
élément retourné par les fonctions membres à élément unique, utilisez pr.first
; pour déréférer l’itérateur au sein de la paire retournée, utilisez-le*pr.first
, ce qui vous donne un élément. Pour accéder au composant bool
, utilisez pr.second
. Pour obtenir un exemple, voir l'exemple de code plus loin dans cet article.
Un value_type
conteneur est un typedef qui appartient au conteneur et, pour set, unordered_set<V>::value_type
est de type const V
.
La fonction membre de plage (5) insère la séquence de valeurs d’élément dans un unordered_set
élément qui correspond à chaque élément traité par un itérateur dans la plage [First, Last)
; par conséquent, Last
n’est pas inséré. La fonction membre de conteneur end()
fait référence à la position qui suit le dernier élément du conteneur. Par exemple, l'instruction s.insert(v.begin(), v.end());
tente d'insérer tous les éléments de v
dans s
. Seuls les éléments qui ont des valeurs uniques dans la plage sont insérés. Les doublons sont ignorés. Pour savoir quels éléments sont rejetés, utilisez les versions à un élément de insert
.
La fonction membre de liste d’initialiseurs (6) utilise un initializer_list
pour copier des éléments dans le unordered_set
.
Pour l’insertion d’un élément construit en place, autrement dit, aucune opération de copie ou de déplacement n’est effectuée, consultez set::emplace
et set::emplace_hint
.
Pour obtenir un exemple de code, consultez set::insert
.
iterator
Type qui fournit un itérateur de transfert constant qui peut lire des éléments dans un unordered_set.
typedef implementation-defined iterator;
Exemple
Consultez l’exemple pour begin
obtenir un exemple de déclaration et d’utilisation d’un itérateur.
key_eq
Obtient l'objet de fonction de comparaison stocké.
Pred key_eq() const;
Notes
La fonction membre retourne l’objet de fonction de comparaison stocké.
Exemple
// std__unordered_set__unordered_set_key_eq.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>
typedef std::unordered_set<char> Myset;
int main()
{
Myset c1;
Myset::key_equal cmpfn = c1.key_eq();
std::cout << "cmpfn('a', 'a') == "
<< std::boolalpha << cmpfn('a', 'a') << std::endl;
std::cout << "cmpfn('a', 'b') == "
<< std::boolalpha << cmpfn('a', 'b') << std::endl;
return (0);
}
cmpfn('a', 'a') == true
cmpfn('a', 'b') == false
key_equal
Type de la fonction de comparaison.
typedef Pred key_equal;
Notes
Le type est un synonyme du paramètre de modèle Pred
.
Exemple
// std__unordered_set__unordered_set_key_equal.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>
typedef std::unordered_set<char> Myset;
int main()
{
Myset c1;
Myset::key_equal cmpfn = c1.key_eq();
std::cout << "cmpfn('a', 'a') == "
<< std::boolalpha << cmpfn('a', 'a') << std::endl;
std::cout << "cmpfn('a', 'b') == "
<< std::boolalpha << cmpfn('a', 'b') << std::endl;
return (0);
}
cmpfn('a', 'a') == true
cmpfn('a', 'b') == false
key_type
Type d'une clé de tri.
typedef Key key_type;
Notes
Le type est un synonyme du paramètre de modèle Key
.
Exemple
// std__unordered_set__unordered_set_key_type.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>
typedef std::unordered_set<char> Myset;
int main()
{
Myset c1;
c1.insert('a');
c1.insert('b');
c1.insert('c');
// display contents "[c] [b] [a] "
for (Myset::const_iterator it = c1.begin(); it != c1.end(); ++it)
std::cout << "[" << *it << "] ";
std::cout << std::endl;
// add a value and reinspect
Myset::key_type key = 'd';
Myset::value_type val = key;
c1.insert(val);
for (Myset::const_iterator it = c1.begin(); it != c1.end(); ++it)
std::cout << "[" << *it << "] ";
std::cout << std::endl;
return (0);
}
[c] [b] [a]
[d] [c] [b] [a]
load_factor
Compte le nombre moyen d'éléments par compartiment.
float load_factor() const;
Notes
La fonction membre retourne (float)
unordered_set::size() / (float)
unordered_set::bucket_count()
, le nombre moyen d’éléments par compartiment.
Exemple
// std__unordered_set__unordered_set_load_factor.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>
typedef std::unordered_set<char> Myset;
int main()
{
Myset c1;
c1.insert('a');
c1.insert('b');
c1.insert('c');
// display contents "[c] [b] [a] "
for (Myset::const_iterator it = c1.begin(); it != c1.end(); ++it)
std::cout << "[" << *it << "] ";
std::cout << std::endl;
// inspect current parameters
std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;
std::cout << "load_factor() == " << c1.load_factor() << std::endl;
std::cout << "max_bucket_count() == "
<< c1.max_bucket_count() << std::endl;
std::cout << "max_load_factor() == "
<< c1.max_load_factor() << std::endl;
std::cout << std::endl;
// change max_load_factor and redisplay
c1.max_load_factor(0.10f);
std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;
std::cout << "load_factor() == " << c1.load_factor() << std::endl;
std::cout << "max_bucket_count() == "
<< c1.max_bucket_count() << std::endl;
std::cout << "max_load_factor() == "
<< c1.max_load_factor() << std::endl;
std::cout << std::endl;
// rehash and redisplay
c1.rehash(100);
std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;
std::cout << "load_factor() == " << c1.load_factor() << std::endl;
std::cout << "max_bucket_count() == "
<< c1.max_bucket_count() << std::endl;
std::cout << "max_load_factor() == "
<< c1.max_load_factor() << std::endl;
std::cout << std::endl;
return (0);
}
[c] [b] [a]
bucket_count() == 8
load_factor() == 0.375
max_bucket_count() == 8
max_load_factor() == 4
bucket_count() == 8
load_factor() == 0.375
max_bucket_count() == 8
max_load_factor() == 0.1
bucket_count() == 128
load_factor() == 0.0234375
max_bucket_count() == 128
max_load_factor() == 0.1
local_iterator
Type d'un itérateur de compartiment.
typedef T4 local_iterator;
Notes
Le type décrit un objet pouvant servir d'itérateur vers l'avant pour un compartiment. Il est décrit ici comme synonyme du type T4
défini par l’implémentation.
Exemple
// std__unordered_set__unordered_set_local_iterator.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>
typedef std::unordered_set<char> Myset;
int main()
{
Myset c1;
c1.insert('a');
c1.insert('b');
c1.insert('c');
// display contents "[c] [b] [a] "
for (Myset::const_iterator it = c1.begin(); it != c1.end(); ++it)
std::cout << "[" << *it << "] ";
std::cout << std::endl;
// inspect bucket containing 'a'
Myset::local_iterator lit = c1.begin(c1.bucket('a'));
std::cout << "[" << *lit << "] ";
return (0);
}
[c] [b] [a]
[a]
max_bucket_count
Obtient le nombre maximal de compartiments.
size_type max_bucket_count() const;
Notes
La fonction membre retourne le nombre maximal de compartiments actuellement autorisés.
Exemple
// std__unordered_set__unordered_set_max_bucket_count.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>
typedef std::unordered_set<char> Myset;
int main()
{
Myset c1;
c1.insert('a');
c1.insert('b');
c1.insert('c');
// display contents "[c] [b] [a] "
for (Myset::const_iterator it = c1.begin(); it != c1.end(); ++it)
std::cout << "[" << *it << "] ";
std::cout << std::endl;
// inspect current parameters
std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;
std::cout << "load_factor() == " << c1.load_factor() << std::endl;
std::cout << "max_bucket_count() == "
<< c1.max_bucket_count() << std::endl;
std::cout << "max_load_factor() == "
<< c1.max_load_factor() << std::endl;
std::cout << std::endl;
// change max_load_factor and redisplay
c1.max_load_factor(0.10f);
std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;
std::cout << "load_factor() == " << c1.load_factor() << std::endl;
std::cout << "max_bucket_count() == "
<< c1.max_bucket_count() << std::endl;
std::cout << "max_load_factor() == "
<< c1.max_load_factor() << std::endl;
std::cout << std::endl;
// rehash and redisplay
c1.rehash(100);
std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;
std::cout << "load_factor() == " << c1.load_factor() << std::endl;
std::cout << "max_bucket_count() == "
<< c1.max_bucket_count() << std::endl;
std::cout << "max_load_factor() == "
<< c1.max_load_factor() << std::endl;
std::cout << std::endl;
return (0);
}
[c] [b] [a]
bucket_count() == 8
load_factor() == 0.375
max_bucket_count() == 8
max_load_factor() == 4
bucket_count() == 8
load_factor() == 0.375
max_bucket_count() == 8
max_load_factor() == 0.1
bucket_count() == 128
load_factor() == 0.0234375
max_bucket_count() == 128
max_load_factor() == 0.1
max_load_factor
Obtient ou définit le nombre maximal d’éléments par compartiment.
float max_load_factor() const;
void max_load_factor(float factor);
Paramètres
factor
Nouveau facteur de charge maximale.
Notes
La première fonction membre retourne le facteur de charge maximale stockée. La seconde fonction membre retourne le facteur de charge maximale stockée avec factor
.
Exemple
// std__unordered_set__unordered_set_max_load_factor.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>
typedef std::unordered_set<char> Myset;
int main()
{
Myset c1;
c1.insert('a');
c1.insert('b');
c1.insert('c');
// display contents "[c] [b] [a] "
for (Myset::const_iterator it = c1.begin(); it != c1.end(); ++it)
std::cout << "[" << *it << "] ";
std::cout << std::endl;
// inspect current parameters
std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;
std::cout << "load_factor() == " << c1.load_factor() << std::endl;
std::cout << "max_bucket_count() == "
<< c1.max_bucket_count() << std::endl;
std::cout << "max_load_factor() == "
<< c1.max_load_factor() << std::endl;
std::cout << std::endl;
// change max_load_factor and redisplay
c1.max_load_factor(0.10f);
std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;
std::cout << "load_factor() == " << c1.load_factor() << std::endl;
std::cout << "max_bucket_count() == "
<< c1.max_bucket_count() << std::endl;
std::cout << "max_load_factor() == "
<< c1.max_load_factor() << std::endl;
std::cout << std::endl;
// rehash and redisplay
c1.rehash(100);
std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;
std::cout << "load_factor() == " << c1.load_factor() << std::endl;
std::cout << "max_bucket_count() == "
<< c1.max_bucket_count() << std::endl;
std::cout << "max_load_factor() == "
<< c1.max_load_factor() << std::endl;
std::cout << std::endl;
return (0);
}
[c] [b] [a]
bucket_count() == 8
load_factor() == 0.375
max_bucket_count() == 8
max_load_factor() == 4
bucket_count() == 8
load_factor() == 0.375
max_bucket_count() == 8
max_load_factor() == 0.1
bucket_count() == 128
load_factor() == 0.0234375
max_bucket_count() == 128
max_load_factor() == 0.1
max_size
Obtient ou définit la taille maximale de la séquence contrôlée.
size_type max_size() const;
Notes
La fonction membre retourne la longueur de la séquence la plus longue que l'objet peut contrôler.
Exemple
// std__unordered_set__unordered_set_max_size.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>
typedef std::unordered_set<char> Myset;
int main()
{
Myset c1;
std::cout << "max_size() == " << c1.max_size() << std::endl;
return (0);
}
max_size() == 4294967295
operator=
Copie une table de hachage.
unordered_set& operator=(const unordered_set& right);
unordered_set& operator=(unordered_set&& right);
Paramètres
right
En unordered_set
cours de copie dans le unordered_set
.
Notes
Après avoir supprimé les éléments existants dans un unordered_set
, operator=
copie ou déplace le contenu de right
dans le unordered_set
.
Exemple
// unordered_set_operator_as.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>
int main( )
{
using namespace std;
unordered_set<int> v1, v2, v3;
unordered_set<int>::iterator iter;
v1.insert(10);
cout << "v1 = " ;
for (iter = v1.begin(); iter != v1.end(); iter++)
cout << *iter << " ";
cout << endl;
v2 = v1;
cout << "v2 = ";
for (iter = v2.begin(); iter != v2.end(); iter++)
cout << *iter << " ";
cout << endl;
// move v1 into v2
v2.clear();
v2 = move(v1);
cout << "v2 = ";
for (iter = v2.begin(); iter != v2.end(); iter++)
cout << *iter << " ";
cout << endl;
}
pointer
Type d'un pointeur vers un élément.
typedef Alloc::pointer pointer;
Notes
Le type décrit un objet pouvant servir de pointeur vers un élément de la séquence contrôlée.
Exemple
// std__unordered_set__unordered_set_pointer.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>
typedef std::unordered_set<char> Myset;
int main()
{
Myset c1;
c1.insert('a');
c1.insert('b');
c1.insert('c');
// display contents "[c] [b] [a] "
for (Myset::iterator it = c1.begin(); it != c1.end(); ++it)
{
Myset::key_type key = *it;
Myset::pointer p = &key;
std::cout << "[" << *p << "] ";
}
std::cout << std::endl;
return (0);
}
[c] [b] [a]
reference
Type d'une référence à un élément.
typedef Alloc::reference reference;
Notes
Le type décrit un objet qui peut servir de référence à un élément de la séquence contrôlée.
Exemple
// std__unordered_set__unordered_set_reference.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>
typedef std::unordered_set<char> Myset;
int main()
{
Myset c1;
c1.insert('a');
c1.insert('b');
c1.insert('c');
// display contents "[c] [b] [a] "
for (Myset::iterator it = c1.begin(); it != c1.end(); ++it)
{
Myset::key_type key = *it;
Myset::reference ref = key;
std::cout << "[" << ref << "] ";
}
std::cout << std::endl;
return (0);
}
[c] [b] [a]
rehash
Régénère la table de hachage.
void rehash(size_type nbuckets);
Paramètres
nbuckets
Nombre de compartiments demandés.
Notes
La fonction membre modifie le nombre de compartiments pour qu’il soit au moins égal à nbuckets
et régénère la table de hachage en fonction des besoins.
Exemple
// std__unordered_set__unordered_set_rehash.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>
typedef std::unordered_set<char> Myset;
int main()
{
Myset c1;
c1.insert('a');
c1.insert('b');
c1.insert('c');
// display contents "[c] [b] [a] "
for (Myset::const_iterator it = c1.begin(); it != c1.end(); ++it)
std::cout << "[" << *it << "] ";
std::cout << std::endl;
// inspect current parameters
std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;
std::cout << "load_factor() == " << c1.load_factor() << std::endl;
std::cout << "max_load_factor() == " << c1.max_load_factor() << std::endl;
std::cout << std::endl;
// change max_load_factor and redisplay
c1.max_load_factor(0.10f);
std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;
std::cout << "load_factor() == " << c1.load_factor() << std::endl;
std::cout << "max_load_factor() == " << c1.max_load_factor() << std::endl;
std::cout << std::endl;
// rehash and redisplay
c1.rehash(100);
std::cout << "bucket_count() == " << c1.bucket_count() << std::endl;
std::cout << "load_factor() == " << c1.load_factor() << std::endl;
std::cout << "max_load_factor() == " << c1.max_load_factor() << std::endl;
return (0);
}
[c] [b] [a]
bucket_count() == 8
load_factor() == 0.375
max_load_factor() == 4
bucket_count() == 8
load_factor() == 0.375
max_load_factor() == 0.1
bucket_count() == 128
load_factor() == 0.0234375
max_load_factor() == 0.1
size
Compte le nombre d'éléments.
size_type size() const;
Notes
La fonction membre retourne la longueur de la séquence contrôlée.
Exemple
// std__unordered_set__unordered_set_size.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>
typedef std::unordered_set<char> Myset;
int main()
{
Myset c1;
c1.insert('a');
c1.insert('b');
c1.insert('c');
// display contents "[c] [b] [a] "
for (Myset::const_iterator it = c1.begin(); it != c1.end(); ++it)
std::cout << "[" << *it << "] ";
std::cout << std::endl;
// clear the container and reinspect
c1.clear();
std::cout << "size == " << c1.size() << std::endl;
std::cout << "empty() == " << std::boolalpha << c1.empty() << std::endl;
std::cout << std::endl;
c1.insert('d');
c1.insert('e');
// display contents "[e] [d] "
for (Myset::const_iterator it = c1.begin(); it != c1.end(); ++it)
std::cout << "[" << *it << "] ";
std::cout << std::endl;
std::cout << "size == " << c1.size() << std::endl;
std::cout << "empty() == " << std::boolalpha << c1.empty() << std::endl;
return (0);
}
[c] [b] [a]
size == 0
empty() == true
[e] [d]
size == 2
empty() == false
size_type
Type d'une distance non signée entre deux éléments.
typedef T2 size_type;
Notes
Le type d'entier non signé décrit un objet qui peut représenter la longueur de n'importe quelle séquence contrôlée. Il est décrit ici comme synonyme du type T2
défini par l’implémentation.
Exemple
// std__unordered_set__unordered_set_size_type.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>
typedef std::unordered_set<char> Myset;
int main()
{
Myset c1;
Myset::size_type sz = c1.size();
std::cout << "size == " << sz << std::endl;
return (0);
}
size == 0
swap
Échange le contenu de deux conteneurs.
void swap(unordered_set& right);
Paramètres
right
Conteneur avec lequel faire l’échange.
Notes
La fonction membre échange les séquences contrôlées entre *this
et right
. Si unordered_set::get_allocator
() == right.get_allocator()
, dans le temps constant, il lève une exception uniquement en raison de la copie de l’objet de caractéristiques stockées de type Tr
, et il invalide aucune référence, pointeur ou itérateur qui désigne des éléments dans les deux séquences contrôlées. Sinon, elle effectue un nombre d’affectations d’éléments et d’appels de constructeurs proportionnel au nombre d’éléments dans les deux séquences contrôlées.
Exemple
// std__unordered_set__unordered_set_swap.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>
typedef std::unordered_set<char> Myset;
int main()
{
Myset c1;
c1.insert('a');
c1.insert('b');
c1.insert('c');
// display contents "[c] [b] [a] "
for (Myset::const_iterator it = c1.begin(); it != c1.end(); ++it)
std::cout << "[" << *it << "] ";
std::cout << std::endl;
Myset c2;
c2.insert('d');
c2.insert('e');
c2.insert('f');
c1.swap(c2);
// display contents "[f] [e] [d] "
for (Myset::const_iterator it = c1.begin(); it != c1.end(); ++it)
std::cout << "[" << *it << "] ";
std::cout << std::endl;
swap(c1, c2);
// display contents "[c] [b] [a] "
for (Myset::const_iterator it = c1.begin(); it != c1.end(); ++it)
std::cout << "[" << *it << "] ";
std::cout << std::endl;
return (0);
}
[c] [b] [a]
[f] [e] [d]
[c] [b] [a]
unordered_set
Construit un objet conteneur.
unordered_set(const unordered_set& Right);
explicit unordered_set(
size_typebucket_count = N0,
const Hash& Hash = Hash(),
const Comp& Comp = Comp(),
const Allocator& Al = Alloc());
unordered_set(unordered_set&& Right);
unordered_set(initializer_list<Type> IList);
unordered_set(initializer_list<Type> IList, size_typebucket_count);
unordered_set(
initializer_list<Type> IList,
size_typebucket_count,
const Hash& Hash);
unordered_set(
initializer_list<Type> IList,
size_typebucket_count,
const Hash& Hash,
const Comp& Comp);
unordered_set(
initializer_list<Type> IList,
size_typebucket_count,
const Hash& Hash,
const Comp& Comp,
const Allocator& Al);
template <class InputIterator>
unordered_set(
InputIteratorfirst,
InputIteratorlast,
size_typebucket_count = N0,
const Hash& Hash = Hash(),
const Comp& Comp = Comp(),
const Allocator& Al = Alloc());
Paramètres
InputIterator
Type d'itérateur.
Al
Objet allocateur à stocker.
Comp
Objet de fonction de comparaison à stocker.
Hash
Objet de fonction de hachage à stocker.
bucket_count
Nombre minimal de compartiments.
Right
Conteneur à copier.
IList
initializer_list
Contenant les éléments à copier.
Notes
Le premier constructeur spécifie une copie de la séquence contrôlée par Right
. Le deuxième constructeur spécifie une séquence vide contrôlée. Le troisième constructeur spécifie une copie de la séquence en déplaçant Right
le quatrième au huitième constructeur, afin de initializer_list
spécifier les éléments à copier. Le neuvième constructeur insère la séquence de valeurs d'éléments [first, last)
.
Tous les constructeurs initialisent également plusieurs valeurs stockées. Pour le constructeur de copie, les valeurs sont obtenues à partir de Right
. Autrement :
Le nombre minimal de compartiments est l’argument bucket_count
, le cas échéant ; sinon, il s’agit d’une valeur par défaut décrite ici comme valeur N0
définie par l’implémentation .
L’objet de fonction de hachage est l’argument Hash
, le cas échéant ; sinon, il s’agit Hash()
.
L’objet de fonction de comparaison est l’argument Comp
, le cas échéant ; sinon, il s’agit Comp()
.
L’objet allocator est l’argument Al
, s’il est présent ; sinon, c’est Alloc()
.
value_type
Type d’un élément.
typedef Key value_type;
Notes
Ce type décrit un élément de la séquence contrôlée.
Exemple
// std__unordered_set__unordered_set_value_type.cpp
// compile with: /EHsc
#include <unordered_set>
#include <iostream>
typedef std::unordered_set<char> Myset;
int main()
{
Myset c1;
c1.insert('a');
c1.insert('b');
c1.insert('c');
// display contents "[c] [b] [a] "
for (Myset::const_iterator it = c1.begin(); it != c1.end(); ++it)
std::cout << "[" << *it << "] ";
std::cout << std::endl;
// add a value and reinspect
Myset::key_type key = 'd';
Myset::value_type val = key;
c1.insert(val);
for (Myset::const_iterator it = c1.begin(); it != c1.end(); ++it)
std::cout << "[" << *it << "] ";
std::cout << std::endl;
return (0);
}
[c] [b] [a]
[d] [c] [b] [a]