rwo*_*ols 6 c++ containers stl find c++11
使用C++ 11 std::find
而不是容器的find
方法有什么好处吗?
在std::vector
(没有find
方法)的情况下,确实std::find
使用一些智能算法或简单地迭代每个元素的天真方式?
在这种情况下,std::map
你似乎需要传递一个std::pair
,这是value_type
一个std::map
.这通常不是很有用,因为通常你想找到一个键或一个映射元素.
那些像std::list
或std::set
或其他容器怎么样std::unordered_set
?
And*_*owl 13
在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::set
和std::unordered_set
,您应该使用find()
成员函数,这可以保证更好的复杂性(分别为O(log n)和平均O(1)).