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

C++ std::find是否仅适用于元素可能未排序的容器?,c++,algorithm,performance,stl,tradeoff,C++,Algorithm,Performance,Stl,Tradeoff,我们可以在std::set上使用std::find,但它可能会很慢,因为std::set有一个成员函数std::set::find,通常比std::find快 std::find是否仅适用于元素可能未排序的容器,例如std::list std::find是否可以阻止用户使用它在std::set上查找内容?一般来说,您可以将std::find与提供输入迭代器的所有容器一起使用。是关于std::find及其迭代器要求的信息 主要问题是有效性。该算法不知道它所使用的容器的内部表示形式。因此,std::

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

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


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

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

主要问题是有效性。该算法不知道它所使用的容器的内部表示形式。因此,std::find只是在特定容器的元素上进行迭代,无法阻止它处理像std::set这样的容器。此外,这将与STL的设计相矛盾


一般来说,与同名的算法相比,您应该更喜欢容器方法。

无论容器是什么,std::find()在最坏的情况下总是采用O(n),因为它下面只是进行线性迭代搜索,并比较迭代器所指的值

因此,它无法利用容器中的元素是否已排序的优点


不,
std::find
不会阻止用户在
std::set

上查找某些内容。虽然您的要求并不完全清楚,但需求在这里。关于
unordered_set
unordered_map
呢?std::find根本不适合容器,它接收到一对迭代器。这些迭代器只需满足InputIterator要求。没有任何东西需要随机访问或利用它。