Mi aspettavo che i due set non ordinati di seguito fossero valutati come equivalenti, ma con mia sorpresa non lo sono. Ciò si verifica perché le due stringhe sono memorizzate nello stesso bucket hash e l'operatore == esegue un confronto sequenziale per gli elementi nel set. Questo dovrebbe essere considerato un bug in std :: unordered_set? Qualcuno ha una soluzione elegante per questo?Perché questi set non ordinati di C++ STL sono considerati uguali?
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
{
}
Utilizzando quale implementazione della libreria standard C++? Questo è un problema noto nelle versioni precedenti dell'implementazione della libreria standard di Visual C++ (questo problema è stato corretto in Visual C++ 2012). –
Scusa, ho dimenticato di includerlo. Sto usando Visual C++ 2010. Hai qualche documentazione sul problema? Non ho trovato nulla quando ho cercato. Grazie!! – user1707438
@ user1707438 Ecco James '[answer] (http://stackoverflow.com/a/2774236/241631) a una domanda precedente che contiene un comparatore di uguaglianza per 'unordered_set'. – Praetorian