unordered_map
コンテナに指定されたキーを持つアイテムがあるかどうかを判断する最も速い方法は何ですか?
それらはほぼ同等のパフォーマンスを持ちます。やろうとしていることを最もよく表すアルゴリズムを使用する必要があります。
これについて詳しく説明すると、通常、count()
はfind()
を使用して実装されます。たとえば、 libcxx では、count()
はreturn (find(__k) != end());
として実装されます。
find()
およびcount()
は、C++の多くのコンテナーに適用できます。
マップ、セットなどの場合、findはハッシュを計算するだけなので、常に一定の実行時間を持ち、最初に見つかった要素(見つからない場合はend()
)にイテレーターを返します。
一方、count()
の実行時間は一定ですO(e)。ここで、eは指定されたキーが見つかった回数です。最悪のケースは、すべてのメンバーが同じであるコレクションであるため、count
の複雑さはO(n)になる可能性があります。
map
またはunordered_map
重複を許可しないため、それらの漸近実行時間は同じになります。
選択は、コードのセマンティクスによって異なります。キーが存在するかどうかだけを確認したい場合は、count
を使用できます。キーが存在するかどうかを確認し、その値を使用する場合は、その要素を指すイテレータがすでに存在するため、find
に移動します。