std:: map
|
Défini dans l'en-tête
<map>
|
||
|
template
<
class
Key,
|
(1) | |
|
namespace
pmr
{
template
<
|
(2) | (depuis C++17) |
std::map
est un conteneur associatif trié qui contient des paires clé-valeur avec des clés uniques. Les clés sont triées en utilisant la fonction de comparaison
Compare
. Les opérations de recherche, de suppression et d'insertion ont une complexité logarithmique. Les maps sont généralement implémentés comme des
arbres rouge-noir
.
Les itérateurs de
std::map
parcourent les éléments dans l'ordre croissant des clés, où l'ordre croissant est défini par la comparaison utilisée lors de la construction. Autrement dit, étant donné
-
m
, une
std::map - it_l et it_r , des itérateurs déréférençables vers m , avec it_l < it_r .
m. value_comp ( ) ( * it_l, * it_r ) == true (du plus petit au plus grand si on utilise la comparaison par défaut).
Partout où la bibliothèque standard utilise les Compare requirements, 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 (non uniques) si aucun n'est comparé comme inférieur à l'autre : ! comp ( a, b ) && ! comp ( b, a ) .
std::map
satisfait aux exigences de
Container
,
AllocatorAwareContainer
,
AssociativeContainer
et
ReversibleContainer
.
Toutes les fonctions membres de
std::map
sont
constexpr
: il est possible de créer et d'utiliser des objets
std::map
dans l'évaluation d'une expression constante.
Cependant,
|
(depuis C++26) |
Table des matières |
Paramètres du modèle
|
Cette section est incomplète
Motif : Ajouter les descriptions des paramètres du modèle. |
Types membres
| Type | Définition | ||||
key_type
|
Key
|
||||
mapped_type
|
T
|
||||
value_type
|
std:: pair < const Key, T > | ||||
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
|
||||
allocator_type
|
Allocator
|
||||
reference
|
value_type & | ||||
const_reference
|
const value_type & | ||||
pointer
|
|
||||
const_pointer
|
|
||||
iterator
|
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
>
|
Classes membres
compare les objets de type
value_type
(classe) |
Fonctions membres
construit la
map
(fonction membre publique) |
|
détruit la
map
(fonction membre publique) |
|
|
assigne des valeurs au conteneur
(fonction membre publique) |
|
|
retourne l'allocateur associé
(fonction membre publique) |
|
Accès aux éléments |
|
|
accéder à l'élément spécifié avec vérification des limites
(fonction membre publique) |
|
|
accéder ou insérer l'élément spécifié
(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++17)
|
insère un élément ou assigne à l'élément actuel si la clé existe déjà
(fonction membre publique) |
|
(C++11)
|
construit un élément en place
(fonction membre publique) |
|
(C++11)
|
construit des éléments en place en utilisant un indice
(fonction membre publique) |
|
(C++17)
|
insère en place si la clé n'existe pas, ne fait rien si la clé existe
(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) |
|
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
map
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
| 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_map
|
202502L
|
(C++26) |
constexpr
std::map
|
Exemple
#include <iostream> #include <map> #include <string> #include <string_view> void print_map(std::string_view comment, const std::map<std::string, int>& m) { std::cout << comment; // Itérer en utilisant les fonctionnalités C++17 for (const auto& [key, value] : m) std::cout << '[' << key << "] = " << value << "; "; // Alternative C++11 : // for (const auto& n : m) // std::cout << n.first << " = " << n.second << "; "; // // Alternative C++98 : // for (std::map<std::string, int>::const_iterator it = m.begin(); it != m.end(); ++it) // std::cout << it->first << " = " << it->second << "; "; std::cout << '\n'; } int main() { // Créer une map de trois paires (string, int) std::map<std::string, int> m{{"CPU", 10}, {"GPU", 15}, {"RAM", 20}}; print_map("1) Carte initiale : ", m); m["CPU"] = 25; // mettre à jour une valeur existante m["SSD"] = 30; // insérer une nouvelle valeur print_map("2) Carte mise à jour : ", m); // L'utilisation de operator[] avec une clé inexistante effectue toujours une insertion std::cout << "3) m[UPS] = " << m["UPS"] << '\n'; print_map("4) Carte mise à jour : ", m); m.erase("GPU"); print_map("5) Après effacement : ", m); std::erase_if(m, [](const auto& pair){ return pair.second > 25; }); print_map("6) Après effacement : ", m); std::cout << "7) m.size() = " << m.size() << '\n'; m.clear(); std::cout << std::boolalpha << "8) La carte est vide : " << m.empty() << '\n'; }
Sortie :
1) Initial map: [CPU] = 10; [GPU] = 15; [RAM] = 20; 2) Updated map: [CPU] = 25; [GPU] = 15; [RAM] = 20; [SSD] = 30; 3) m[UPS] = 0 4) Updated map: [CPU] = 25; [GPU] = 15; [RAM] = 20; [SSD] = 30; [UPS] = 0; 5) After erase: [CPU] = 25; [RAM] = 20; [SSD] = 30; [UPS] = 0; 6) After erase: [CPU] = 25; [RAM] = 20; [UPS] = 0; 7) m.size() = 3 8) Map is empty: true
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 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 |
| LWG 464 | C++98 |
l'accès à une
map
const par clé était peu pratique
|
fonction
at
fournie
|
Voir aussi
|
collection de paires clé-valeur, triées par clés
(modèle de classe) |
|
|
(C++11)
|
collection de paires clé-valeur, hachées par clés, clés uniques
(modèle de classe) |
|
(C++23)
|
adapte deux conteneurs pour fournir une collection de paires clé-valeur, triées par clés uniques
(modèle de classe) |