5

我希望下面的两个无序集被评估为等价的,但令我惊讶的是,它们不是。发生这种情况是因为这两个字符串存储在同一个哈希桶中,并且 operator== 对集合中的项目进行顺序比较。这是否应该被视为 std::unordered_set 中的错误?有没有人有一个优雅的解决方法?

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
{   
}
4

1 回答 1

4

这是 Visual C++ 2010 标准库实现中的一个已知错误。此错误已在 Visual C++ 2012 中修复;如果此错误影响您,则可能值得考虑升级。(在 Microsoft Connect 上有一个错误,但它似乎已经消失了;我正试图弄清楚它发生了什么。)

作为一种解决方法,请考虑您是否真的需要使用无序关联容器——它们的性能不一定比有序关联容器的性能好。

于 2012-09-28T22:43:04.820 回答