2013-01-04 14 views

答えて

13

彼らは同等の性能について持っているでしょう。あなたは何をしようとしているのかを最もよく表すアルゴリズムを使用するべきです。

詳細については、count()find()を使用して実装されます。例えば、libcxxに、count()return (find(__k) != end());

1

ここではFindが最適なオプションだと思います。それ以上は必要ありません。

http://www.cplusplus.com/reference/unordered_map/unordered_map/find/

+3

'unordered_map'は一意のキーを持っていることを知っていますので、' count() 'は最初のマッチで停止します(実装が壊れていない限り、 –

1

find()count()として実装されているC++における多くのコンテナに適用可能です。

マップの場合、findなどの検索は常にハッシュを計算し、見つかった最初の要素(イテレータは見つからなければend())に戻ります。他方、一定の実行時間O(e)を有する。ここで、eは、提供された鍵が見つかる回数である。別ウィンドウ(タブ)の大きな表示で見る最悪の場合は、すべてのメンバーが同じであるコレクションですので、countが複雑O(n)の

mapまたはunordered_mapを持つことができますので、その漸近実行時間が同じになり、重複することができません。

コードのセマンティクスによって異なります。キーが存在するかどうかだけを確認したい場合は、countを使用します。キーが存在するかどうかを確認してその値を使用する場合は、その要素を指すイテレータが既に存在するため、findに移動します。

関連する問題