2013-01-04 83 views

回答

13

他們將有大約相同的性能。你應該使用最能表達你想要做的事情的算法。

詳細說明一下,一般count()將使用find()執行。例如,在libcxxcount()被實現爲return (find(__k) != end());

1

find()count()在C是適用於許多容器++。

對於映射,集合等發現將始終有恆定的執行時間,因爲它只是計算散列,並返回一個迭代器找到的第一個元素(end()如果未找到)。

count()另一方面,具有恆定的執行時間O(e),其中e是提供的密鑰被找到的次數。最壞的情況是,所有的成員都是相同的集合,所以count可以有一個複雜度爲O(n)的

mapunordered_map不允許重複,因此,他們的漸近運行時間是相同的。

選擇取決於代碼中的語義。如果你只想檢查一個密鑰是否存在,你可以使用count。如果你想檢查一個鍵是否存在,並使用它的值,那麼去find,因爲你已經有一個迭代器指向那個元素。

相關問題