Spodziewałem się, że dwa nieuporządkowane zestawy poniżej zostaną ocenione jako równoważne, ale ku mojemu zdziwieniu nie są. Dzieje się tak, ponieważ dwa łańcuchy są przechowywane w tym samym buforze mieszającym, a operator == wykonuje sekwencyjne porównanie elementów w zestawie. Czy należy to uznać za błąd w std :: unordered_set? Czy ktoś ma eleganckie obejście tego problemu?Dlaczego te nieuznane zestawy C++ STL nie są uznawane za równe?
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
{
}
Korzystanie z wdrożenia biblioteki standardowej C++? Jest to znany problem w starszych wersjach implementacji biblioteki standardowej Visual C++ (Ten problem został rozwiązany w programie Visual C++ 2012). –
Przepraszam, zapomniałem o tym. Używam Visual C++ 2010. Czy masz jakieś dokumentacji wokół problemu? Nie mogłem znaleźć niczego, gdy szukałem. Dzięki!! – user1707438
@ user1707438 Oto James '[odpowiedź] (http://stackoverflow.com/a/2774236/241631) na wcześniejsze pytanie, które zawiera komparator równości dla 'unordered_set'. – Praetorian