Bien !
1) Python est un langage de script objet, clair, facile à apprendre, opensource, bourré de routine toutes prêtes, multiplaforme et ouvert (on peut l'interfacer avec d'autres langages comme C, C++, etc.) Voir http://www.python.org et http://www.rimbault.net/python.
2) La majorité des compilateurs C++ sont fournis avec des classes String (pas toujours super-bien construites, mais bon). Elles surchargent généralement l'opération de comparaison, ce qui permet - il me semble - de les utiliser dans les switch (arrêtez-moi si je dis une connerie).
3)
Le hashage est une opération très simple:
C'est une moulinette qui prend en entrée un nombre quelqconque d'octets et qui sort un nombre fixe d'octets.
Ces octets en sortie sont une sorte d'empreinte de la chaîne en entrée.
Deux chaînes identiques auront 2 hash identiques.
Si tu as 2 hash identiques, tu peux être sûr à 99,9999999% que les chaînes d'origine sont identiques.
Les hash sont massivement utilisés: dans les fichiers archive (ZIP, RAR...) pour s'assurer que les fichiers ne sont pas endommagés ; dans tous les systèmes d'exploitation pour vérifier la validité d'un mot de passe sans avoir à le stocker ; en crypto (ex:échanges bancaires, PGP, SSL/HTTPS...) pour signer des messages ou des certificats ; dans les bases de données pour construire des indexes ; etc.
Les hash étant généralement courts (ex: 32 bits pour une CRC32), l'ordinateur sait très bien les utiliser comme des nombres et les comparer dans des switch.
Il est plus facile de comparer 2 entiers (2 hashs) que 2 chaînes de caractères (c'est d'ailleurs ce qui est fait dans les bases de données pour les clés primaires).
Il existe différents types de hash (ou CRC). Pour comparer des chaînes de quelques centaines d'octets, une CRC16 suffit largement.