1

NSSetCocoa のパフォーマンスとSTL のパフォーマンスの単純な無作為化テストを実行しましたunordered_set。どちらもハッシュ テーブルを使用して実装されます。C++ は非常にパフォーマンスの高いコードで知られているためNSSetunordered_set. これがなぜなのか、誰かが光を当てることができますか?

PSテストはランダムな文字列を検索していました(NSStringforNSSetbasic_string<unichar>forを使用unordered_set)。

編集: コードは次のとおりです: https://github.com/fumoboy007/StringCollectionSpeedTest

4

1 に答える 1

1

最適化を有効にして、C++ コンテナーがいかに「高速」であるかをお楽しみください。コンパイラーによって最適化されたループはゼロナノ秒です。「私をからかわないで!」とつぶやいていませんか?コンパイラはあなたが思っているよりも賢いです。;)

したがって、最初にコンパイラを騙します。ループによって結果が生成されるようにテストを再構築し、その結果は各反復のアクションに依存する必要があります (たとえば、カウントの合計)。その結果は、コンソールに出力するなど、どこかで使用する必要があります。そうしないと、コンパイラはその結果が必要ないことを再度検出するため、ループをまったく実行する必要はありません。

編集:

テスト結果 (私のシステム上):

NSSet と std::unordered_set のルックアップ時間はほぼ同じであることが判明しました。

于 2013-08-11T21:35:14.933 に答える