为什么这些C ++ STL无序集合被认为是相同的?

时间:2012-09-28 22:25:14

标签: c++ visual-studio-2010 visual-c++ std unordered

我预计下面的两个无序集合被评估为等价,但令我惊讶的是它们不是。发生这种情况是因为两个字符串存储在同一个哈希桶中,而运算符==对集合中的项目进行顺序比较。这应该被视为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
{   
}

1 个答案:

答案 0 :(得分:4)

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

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