5

以下の 2 つの順序付けられていない集合が同等であると評価されることを期待していましたが、驚いたことに、そうではありませんでした。これは、2 つの文字列が同じハッシュ バケットに格納され、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 に答える