example - Accès à l'élément de carte C++ const




map c++ (3)

J'ai essayé d'utiliser l'opérateur [] accéder à l'élément dans une carte const C ++, mais cette méthode a échoué. J'ai aussi essayé d'utiliser "at ()" pour faire la même chose. Cela a fonctionné cette fois. Cependant, je n'ai trouvé aucune référence sur l'utilisation de "at ()" pour accéder à l'élément dans une carte const C ++. Est-ce que "at ()" est une fonction nouvellement ajoutée dans la map C ++? Où puis-je trouver plus d'informations à ce sujet? Merci beaucoup!

Un exemple pourrait être le suivant:

#include <iostream>
#include <map>

using namespace std;

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

        const map<int, char> B = A;

        cout << B.at(3) << endl; // it works
        cout << B[3] << endl;  // it does not work

}

Pour utiliser "B [3]", il a renvoyé les erreurs suivantes lors de la compilation:

t01.cpp: 14: erreur: en passant 'const std :: map, std :: allocateur>>' comme 'cet' argument de '_Tp & std :: map <_Key, _Tp, _Compare, _Alloc> :: operator [] ( const _Key &) [avec _Key = int, _Tp = char, _Compare = std :: less, _Alloc = std :: allocateur>] 'rejette les qualificatifs

Le compilateur utilisé est g ++ 4.2.1



L'opérateur [] créera une nouvelle entrée dans la carte si la clé donnée n'existe pas. Cela peut donc changer la carte.

Voir ce lien


at() est une nouvelle méthode pour std::map en C ++ 11.

Plutôt que d'insérer un nouvel élément construit par défaut comme le fait l' operator[] si un élément avec la clé donnée n'existe pas, il lève une exception std::out_of_range . (Ceci est similaire au comportement de at() pour deque et vector .)

En raison de ce comportement, il est logique qu'il y ait une surcharge const de at() , contrairement à operator[] qui a toujours le potentiel de changer la carte.





const