我预计下面的两个无序集被评估为等效,但令我惊讶的是他们不是。发生这种情况的原因是两个字符串存储在同一个散列桶中,并且运算符==会对该集合中的项目进行顺序比较。这应该被认为是std :: unordered_set中的一个错误吗?有没有人有这个优雅的解决方法?为什么这些C++ STL无序集合被认为是相等的?
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
{
}
使用哪种C++标准库实现?这是早期版本的Visual C++标准库实现中的已知问题(此问题已在Visual C++ 2012中得到解决)。 –
对不起,我忘了包括那个。我正在使用Visual C++ 2010.您是否有任何关于此问题的文档?我搜索时找不到任何东西。谢谢!! – user1707438
@ user1707438这里是詹姆斯的[回复](http://stackoverflow.com/a/2774236/241631)到一个早先的问题,其中包含'unordered_set'的相等比较器。 – Praetorian