我们可以在std::find
上使用std::set
,但它可能会很慢,因为std::set
的成员函数std::set::find
通常比std::find
快。< / p>
std::find
是否仅适用于元素可能未排序的容器,例如std::list
?
可以std::find
阻止用户使用它来查找std::set
上的内容吗?
答案 0 :(得分:2)
一般来说,您可以将 std :: find 与所有为您提供输入迭代器的容器一起使用。 Here是关于 std :: find 及其迭代器要求的信息。
主要问题是有效性。该算法对其使用的容器的内部表示一无所知。所以 std :: find 只是迭代特定容器的元素。没有办法阻止它处理像 std :: set 这样的容器。而且,它与 STL 的设计相矛盾。
作为一般规则,您应该更喜欢具有相同名称的算法的容器方法。
答案 1 :(得分:2)
无论容器如何,std :: find()总是将 O(n)用于最坏的情况,因为它下面只是进行线性迭代搜索,并比较迭代器指向的值
因此,它无法利用该容器中的元素是否被排序。
不,std::find
不会阻止用户在std::set
上找到某些内容。