std:: set
|
Défini dans l'en-tête
<set>
|
||
|
template
<
class
Key,
|
(1) | |
|
namespace
pmr
{
template
<
|
(2) | (depuis C++17) |
std::set
est un conteneur associatif qui contient un ensemble trié d'objets uniques de type
Key
. Le tri est effectué en utilisant la fonction de comparaison de clés
Compare
. Les opérations de recherche, suppression et insertion ont une complexité logarithmique. Les ensembles sont généralement implémentés sous forme d'
arbres rouge-noir
.
Partout où la bibliothèque standard utilise les Compare exigences, l'unicité est déterminée en utilisant la relation d'équivalence. En termes imprécis, 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 ) .
std::set
satisfait aux exigences de
Container
,
AllocatorAwareContainer
,
AssociativeContainer
et
ReversibleContainer
.
Toutes les fonctions membres de
std::set
sont
constexpr
: il est possible de créer et d'utiliser des objets
std::set
dans l'évaluation d'une expression constante.
Cependant, les objets
|
(depuis C++26) |
Table des matières |
Paramètres du modèle
|
Cette section est incomplète
Raison : Ajouter les descriptions des paramètres du template. |
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
|
|
||||
const_pointer
|
|
||||
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 | ||||
insert_return_type
(depuis C++17)
|
type décrivant le résultat de l'insertion d'un
node_type
, une spécialisation de
template
<
class
Iter,
class
NodeType
>
|
Fonctions membres
construit le
set
(fonction membre publique) |
|
détruit le
set
(fonction membre publique) |
|
|
assigne des valeurs au conteneur
(fonction membre publique) |
|
|
retourne l'allocateur associé
(fonction membre publique) |
|
Itérateurs |
|
|
(C++11)
|
retourne un itérateur vers le début
(fonction membre publique) |
|
(C++11)
|
retourne un itérateur vers la fin
(fonction membre publique) |
|
(C++11)
|
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) |
|
|
(C++23)
|
insère une plage d'éléments
(fonction membre publique) |
|
(C++11)
|
construit l'élément en place
(fonction membre publique) |
|
(C++11)
|
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)
|
fusionne 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) |
|
retourne 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
set
s
(modèle de fonction) |
|
spécialise l'algorithme
std::swap
(modèle de fonction) |
|
|
(C++20)
|
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 fonctions utilisant ces deux types comme types de paramètres peut violer la
Règle de Définition Unique
. Étant donné que
iterator
est convertible en
const_iterator
, une fonction unique 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::set
|
Exemple
#include <algorithm> #include <iomanip> #include <iostream> #include <iterator> #include <set> #include <string_view> template<typename T> std::ostream& operator<<(std::ostream& out, const std::set<T>& set) { if (set.empty()) return out << "{}"; out << "{ " << *set.begin(); std::for_each(std::next(set.begin()), set.end(), [&out](const T& element) { out << ", " << element; }); return out << " }"; } int main() { std::set<int> set{1, 5, 3}; std::cout << set << '\n'; set.insert(2); std::cout << set << '\n'; set.erase(1); std::cout << set << "\n\n"; std::set<int> keys{3, 4}; for (int key : keys) { if (set.contains(key)) std::cout << set << " contient " << key << '\n'; else std::cout << set << " ne contient pas " << key << '\n'; } std::cout << '\n'; std::string_view word = "element"; std::set<char> characters(word.begin(), word.end()); std::cout << "Il y a " << characters.size() << " caractères uniques dans " << std::quoted(word) << ":\n" << characters << '\n'; }
Sortie :
{ 1, 3, 5 }
{ 1, 2, 3, 5 }
{ 2, 3, 5 }
{ 2, 3, 5 } contient 3
{ 2, 3, 5 } ne contient pas 4
Il y a 5 caractères uniques dans "element":
{ e, l, m, n, t }
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, triée par clés
(modèle de classe) |
|
|
(C++11)
|
collection de clés uniques, hachée par clés
(modèle de classe) |
|
(C++23)
|
adapte un conteneur pour fournir une collection de clés uniques, triée par clés
(modèle de classe) |