8
votes

Y a-t-il une différence entre STD :: map et std :: map ?

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;


0 commentaires

4 Réponses :


1
votes

Etant donné que INT est copié par valeur cette déclaration de const n'a aucun sens. D'autre part xxx

change de manière spectaculaire une image


2 commentaires

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



0
votes

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 


1 commentaires

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)



1
votes

std :: map constise de toute façon son type de clé: std :: map :: valse_type est std :: paire . Si vous ajoutez un const sur le type de touche, const const int s'effondrera simplement sur const int .


0 commentaires

13
votes

La réponse à votre question de titre est oui. Il y a une différence. Vous ne pouvez pas passer un std :: map à une fonction qui prend un std :: carte . .

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.


1 commentaires

La première réponse qui répond à la question.