Oh, tu commences le C++. Ca explique les questions. Je te conseilles de lire un cours de c++ en entier pour avoir une idee des fonctionnalites de C++.
C'est quoi une équivalence sémantique ?
En C++, tu peux redefinir pour les objets ce que les differents operateurs font. Du coup, tu peux avoir ta propre definition de + pour type en particulier. De la meme facon tu peux redefinit l'indirection *, ou l'egalite ==. Ca permet d'avoir un type qui se comporte comme un pointeur. C'est ce que la fonction map::find retourne, elle retourne un iterateur, qui se comporte comme un pointeur.
Les .first et .second sont prédéfinies pour les maps ?
map::find retourne un iterateur sur une paire <Key,Value> C'est pour ca que tu peux faire .first et .second, c'est parceque la paire (std::pair) definit .first et .second.
C'est quoi le type "auto" ?
C'est une nouveaute de C++11. Ca permet d'ecrire
auto foo = bar;
et la variable foo sera declare comme ayant le meme type que bar. Ainsi, tu peux ecrire du code sans forcement avoir a t'inquieter du type exacte de ce que tu recois. Dans l'exemple de find par exemple, le type de it est probablement qqch du genre std::map<std::string,int>::iterator. Utiliser auto te permet de ne pas a taper tout ca. (Et c'est aussi utile quand tu fais du code template, mais pas la peine de t'embrouiller plus.)
Je ne comprends pas le dernier exemple, pourquoi il renvoie 0 alors que le couple ("z",0) a été crée implicitement ? je veux dire, 0 est la valeur par défaut de tous les types ?
Dans map, il y a une difference entre faire un find et utiliser l'operateur []. find retourne un iterateur sur la paire qui va bien. Alors que [] renvoie directement la valeur associe a la cle. Si la cle n'existe pas, elle est cree avec la valeur par defaut du type value. Pour les type primaire ca va etre 0. Mais pour d'autre type, ca sera ce qui est fournit par le constructeur par defaut.