Je m'attendais à ce que les deux ensembles non ordonnés ci-dessous soient évalués comme équivalents, mais à ma grande surprise ils ne le sont pas. Cela se produit car les deux chaînes sont stockées dans le même compartiment de hachage et l'opérateur == effectue une comparaison séquentielle pour les éléments de l'ensemble. Cela devrait-il être considéré comme un bug dans std :: unordered_set? Quelqu'un at-il une solution de contournement élégante pour cela?Pourquoi ces ensembles non triés STL C++ ne sont-ils pas considérés comme égaux?
std::unordered_set<std::string> a,b;
a.insert("500666");
a.insert("961021");
b.insert("961021");
b.insert("500666");
if (a == b) // condition is evaulated as false
{
}
Utilisation de l'implémentation de la bibliothèque standard C++ Ce problème est connu dans les anciennes versions de l'implémentation de la bibliothèque standard Visual C++ (Ce problème a été résolu dans Visual C++ 2012). –
Désolé, j'ai oublié d'inclure cela. J'utilise Visual C++ 2010. Avez-vous de la documentation sur le problème? Je n'ai rien trouvé quand j'ai cherché. Merci!! – user1707438
@ user1707438 Voici la réponse de James [http://stackoverflow.com/a/2774236/241631] à une question précédente qui contient un comparateur d'égalité pour 'unordered_set'. – Praetorian