2

我们可以使用std::findon std::set,但它可能会很慢,因为std::set它的成员函数std::set::find通常比std::find.

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

可以std::find阻止用户使用它来查找东西std::set吗?

4

2 回答 2

2

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

主要问题是有效性。该算法对它所使用的容器的内部表示一无所知。所以std::find只是迭代特定容器的元素。没有办法阻止它处理像std::set这样的容器。而且,这将与STL的设计相矛盾。

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

于 2016-11-18T06:46:23.037 回答
2

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

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

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

于 2016-11-29T03:35:33.257 回答