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

时间:2016-11-18 06:38:06

标签: c++ algorithm performance stl tradeoff

我们可以在std::find上使用std::set,但它可能会很慢,因为std::set的成员函数std::set::find通常比std::find快。< / p>

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

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

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:2)

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

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

不,std::find不会阻止用户在std::set上找到某些内容。