c++ - 为什么这些 C++ STL 无序集不被视为相等?

标签 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
{   
}

最佳答案

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

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

关于c++ - 为什么这些 C++ STL 无序集不被视为相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12648154/

相关文章:

c++ - 用于可视化二进制搜索树的图形库

c++ - setter / getter 和分层数据结构

c++ - 程序在 visual studio 中启动时看不到文件

visual-studio-2010 - 将解决方案按原样提交给 SVN

c++ - 具体对接框架

c++ - 有没有办法在链接时设置 elf NEEDED 字段?

c++ - 为什么关键字 `explicit` 不适用于函数参数?

asp.net - MVC 转换项目,除非添加 'Global' 或删除 System...,否则完全限定的类不可用

visual-c++ - 在OpenCV中将文件名作为命令行参数传递

c++ - 在 Visual C++ 中删除调用后检测到堆损坏?