de ce que je comprends, la clé d'une paire de valeur dans une carte STD :: La carte ne peut pas être modifiée une fois insérée. Cela signifie-t-il que la création d'une carte avec l'argument de modèle clé en tant que const n'a aucun effet?
std::map<int, int> map1; std::map<const int, int> map2;
4 Réponses :
Etant donné que INT est copié par valeur cette déclaration de const n'a aucun sens.
D'autre part change de manière spectaculaire une image p> p>
Votre exemple ne traite pas de la question: Cons-Char * est un pointeur non constant à un caractère constant, tandis que la question concerne la création du type constant (donc un pointeur constant à un caractère non constant): STD :: map < Char * const, int>
Point de message sur le sens de la copie d'utilisation Sémantican, "Cons-Char *" copié par la valeur, permet une itération via la clé, mais désactive la modification de la clé. Votre déclaration est une sorte de gêne occasionnée. - il désactive l'itération via la clé, mais permet de modifier: char * const v = "qwe"; * v = '6'; // autorisé !!! / * Mais cette erreur Cause Compiler: V ++; * / Char * const V - Juste
Comme le dit Dewfy, avec l'exemple que vous avez donné, cela n'a pas d'importance car int est un type intégré et il sera copié par la valeur, mais avec char * c'est un peu différent ...
Si vous aviez P>
map<const char*, int>::iterator
Voir le commentaire à Dewfy: Const Char * est un pointeur non constant à un caractère constant. Vous ne faites pas le type constant, mais changer complètement le type (pour pointer vers un type différent)
std :: map code> constise de toute façon son type de clé:
std :: map
std :: paire
const code> sur le type de touche,
const const int code> s'effondrera simplement sur
const int code>. p>
La réponse à votre question de titre est oui. Il y a une différence. Vous ne pouvez pas passer un Cependant, le comportement fonctionnel des cartes est identique, même s'ils sont différents types. Ce n'est pas inhabituel. Dans de nombreux contextes, int et long se comportent de la même manière, même si elles sont formellement différentes types. P> std :: map
std :: carte
La première réponse qui répond à la question.