Maison >développement back-end >C++ >Const std::map Accès : `operator[]` vs `at()` – Lequel devriez-vous utiliser ?

Const std::map Accès : `operator[]` vs `at()` – Lequel devriez-vous utiliser ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-03 17:26:14279parcourir

Const std::map Access: `operator[]` vs. `at()` – Which Should You Use?

Accès aux éléments d'une carte Const avec Operator[] vs. at()

Lorsque vous travaillez avec une constante std::map, l'accès les éléments utilisant l'opérateur[] peuvent être problématiques. Bien qu'il puisse sembler intuitif d'utiliser cette méthode, sa compilation échoue. En effet, l'opérateur[] s'attend à ce qu'une carte non const modifie la carte si la clé n'existe pas.

Cependant, il existe une méthode alternative, at(), qui a été introduite en C 11 spécifiquement pour ce but. Contrairement à Operator[], at() lève une exception std::out_of_range si la clé n'existe pas, plutôt que d'insérer un élément construit par défaut.

Ce comportement s'aligne bien avec le concept de carte constante. En définissant une surcharge const de at(), cela permet un accès sûr et efficace aux éléments sans risque de modifications involontaires.

Pour illustrer, considérons l'exemple suivant :

#include <iostream>
#include <map>

int main()
{
    std::map<int, char> A;
    A[1] = 'b';
    A[3] = 'c';

    const std::map<int, char> B = A;

    std::cout << B.at(3) << std::endl; // works
    std::cout << B[3] << std::endl;    // cannot access (compile error)
}

Dans ce scénario, l'utilisation de Operator[] sur B entraînerait une erreur de compilation, car il s'agit d'une carte const et ne peut pas être modifiée. Cependant, la méthode at() fonctionne parfaitement car elle est consciente de la nature const de la carte et lève une exception si la clé n'existe pas.

Par conséquent, pour accéder aux éléments d'un const std::map, at() est l'approche recommandée et la plus sûre pour éviter les modifications involontaires. Plus d'informations sur cette fonctionnalité peuvent être trouvées dans la norme C 11 ou dans la documentation relative à la classe std::map.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn