我們可以在std::set
上使用std::find
,但它可能會很慢,因爲std::set
的成員函數std::set::find
通常比std::find
更快。是std :: find僅適用於其元素可能未被排序的容器?
是std::find
僅適用於其元素可能未被排序的容器,例如, std::list
?
可以std::find
阻止用戶使用它來找到std::set
上的東西嗎?
我們可以在std::set
上使用std::find
,但它可能會很慢,因爲std::set
的成員函數std::set::find
通常比std::find
更快。是std :: find僅適用於其元素可能未被排序的容器?
是std::find
僅適用於其元素可能未被排序的容器,例如, std::list
?
可以std::find
阻止用戶使用它來找到std::set
上的東西嗎?
一般來說,你可以使用的std ::發現所有這些爲您提供輸入迭代容器。 Here是關於std :: info及其迭代器要求的信息。
主要問題是有效性。該算法不知道任何有關它所使用的容器的內部表示。因此std :: find只是迭代特定容器的元素。沒有辦法阻止它處理容器,如std :: set。而且,這與STL的設計相矛盾。
作爲一般規則,您應該將容器方法更改爲具有相同名稱的算法。
無論容器如何,在最壞的情況下,std :: find()總是會使用O(n),因爲它下面只做線性迭代搜索,並比較迭代器指向的值。
因此,它無法利用該容器中的元素是否已排序。
而且不,std::find
不會阻止用戶找到std::set
上的東西。
*要求*在這裏http://en.cppreference.com/w/cpp/algorithm/find,雖然它不完全清楚你在問什麼。 – juanchopanza
'unoredered_set'和'unordered_map'呢? – juanchopanza
std :: find根本不適合容器,它接收一對迭代器。這些迭代器只需要滿足InputIterator的要求。沒有什麼需要隨機訪問或利用它。 –