std :: find的优点

时间:2013-06-22 22:40:57

标签: c++ c++11 stl find containers

使用C ++ 11的std::find优于容器的find方法有什么优势吗?

  • std::vector(没有find方法)的情况下,std::find是否使用了一些智能算法或简单地迭代每个元素的天真方式?< / p>

  • 如果是std::map,您似乎需要传递std::pairvalue_type std::map。这似乎不太有用,因为通常你想找到一个键或一个映射元素。

  • std::liststd::setstd::unordered_set等其他容器呢?

1 个答案:

答案 0 :(得分:11)

  

在std :: vector(没有find方法)的情况下,std :: find是否使用了一些智能算法或简单地迭代每个元素的天真方式?

它不能,因为矢量没有排序。除了具有O(n)复杂度的线性搜索之外,没有其他方法可以在未排序的向量中找到元素。

另一方面,序列容器不提供find()成员函数,因此您无法使用它。

  

在std :: map的情况下,你似乎需要传递一个std :: pair,它是std :: map的value_type。这通常不是很有用,因为通常你想找到一个键或一个映射元素。

确实,在这里你应该使用find()成员函数,这可以保证更好的复杂性(O(log N))。

通常,当容器公开与通用算法同名的成员函数时,这是因为成员函数执行相同的操作,但提供了更好的复杂性保证。

  

std :: list或std :: set或std :: unordered_set等其他容器呢?

就像std::vector一样,std::list不是一个已排序的容器 - 所以同样的结论适用。

对于std::setstd::unordered_set,您应该使用find()成员函数,这可以保证更高的复杂度(分别为O(log n)和平均O(1))