我預計下面的兩個無序集被評估爲等效,但令我驚訝的是他們不是。發生這種情況的原因是兩個字符串存儲在同一個散列桶中,並且運算符==會對該集合中的項目進行順序比較。這應該被認爲是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