std::find是否只适用于元素可能未排序的容器?

Is std::find suitable only for containers whose elements may be not sorted?

我们可以在std::set上使用std::find,但它可能会很慢,因为std::set有一个成员函数std::set::find,它通常比std::find快.

是否std::find仅适用于其元素可能未排序的容器,例如std::list

可以 std::find 阻止用户使用它在 std::set 上查找内容吗?

一般来说,您可以将 std::find 与所有为您提供 输入迭代器 的容器一起使用。 Here 是关于 std::find 及其迭代器要求的信息。

主要问题是有效性。该算法对其使用的容器的内部表示一无所知。所以 std::find 简单地迭代特定 container.There 的元素是无法阻止它处理像 std::set[= 这样的容器的23=]。而且会与STL.

的设计相矛盾

作为一般规则,您应该更喜欢容器方法而不是同名算法。

不考虑容器,std::find() 在最坏的情况下总是需要 O(n),因为它只是简单地进行线性迭代搜索,并比较迭代器指向的值。

因此它无法利用该容器中的元素是否已排序。

不,std::find 不会阻止用户在 std::set 上找到东西。